>> [음악 연주]
>> ZAMYLA CHAN :하자 타격 크기 조정을 가진 것들입니다.
크기 조정, 사용자가를 통해 전달할 것 명령 줄, 비트 맵 이미지가
그들은 당신이 번호로 확장 할 그들은 또한에 전달하는 것이
명령 줄에서.
우리가 어떻게해야합니까?
>> 음, 첫 번째 것들 먼저하자 단계로이 분해.
당신은 INFILE을 열고 자하는거야 그들은 당신을 줄뿐만 아니라, 있음
작성하고 OUTFILE을 열고 그 당신은 둘거야
높은 해상도 변경
그런 다음 크기를 조정하고,하고 있기 때문에 이 비트 맵이기 때문에, 그것은 헤더, 그래서
당신은 또한 헤더를 업데이트 할 예정입니다 OUTFILE에 대한 정보,
그리고 안으로 그 쓰기
그런 다음에 읽을거야 INFILE의 주사선,
픽셀 별 가로 크기 조정 와로 그 화소를 작성
OUTFILE 지정 등 사용자의 규모에 의해.
>> 당신은에 기억거야 필요에 따라 여백을 추가합니다.
나중에에 대한 자세한.
그리고 나서, 수직으로 크기를 조정.
OK.
그래서이 조금 더 될 것입니다 그것을 한 누구보다 복잡하지만,
무엇 비슷하면 해당 copy.c는 것입니다, 또, 매우 유용.
, copy.c 파일을 열 것을 기억 에 대한 헤더 정보를 업데이트
OUTFILE, 다음 주사선으로 읽고, 픽셀 별, 화소마다 이벤트
출력 파일의 스캔 라인에.
>> 그래서 다시, 첫 번째 단계는 아마도 수도 CP, copy.c, resize.c에 수
당신의 PSET5 디렉토리에.
당신이 그것을 복사하기 전에,하지만 기억, 당신이 이해하고 있는지 확인하십시오
아주 철저하게 copy.c.
OK.
>> 그래서 파일을 열 수 있습니다.
당신은이 작업을 수행하는 방법을 알고있다.
내가 당신에게 맡길거야.
다음에, 헤더 정보를 업데이트 OUTFILE하십시오.
우리는 새로운 비트 맵을 가지고 있기 때문에, 우리는 새로운 헤더 정보가 있습니다.
무슨 일이 변화하는거야?
음, 파일 크기는 바꿀 것입니다 우리는 더 많은 것을해야 할 것입니다 때문에
이전보다 픽셀.
이미지 크기는, 따라서,이다 한, 변경 예정
폭과 높이.
>> 그래서 어떤 변수들은 정확하게인가?
글쎄, 당신은 헤더에 보면 정보, 당신이 참조
합계를 나타냅니다 biSizeImage, 바이트 화상의 크기,
픽셀과 패딩을 포함.
biWidth는 화상의 폭 픽셀, 패딩 마이너스.
biHeight에은 높이 픽셀의 이미지.
그래서 사람들은에 포함되어 있습니다 구조체 BITMAPFILEHEADER와
BITMAPINFOHEADER.
당신은에 의해 어느 것이 어느 하나 말할 수 bmp.h 예정보고
BITMAPINFOHEADER 구조체와 보는 변수가 나열되어있다.
>> 그래서 outfiles 헤더를 업데이트 정보, 당신이 원하는거야
의 그 값을 변경 높이와 너비.
그러나 기회는, 당신은 몇 가지가 필요할 수 있습니다 INFILE의 헤더 정보
나중에, 그래서 최고의 모두를 추적 할 수 있습니다.
하지만 변수를 매우 명확하게 이름 있도록 할 실수
잘못된 값에 쓰기 OUTFILE의 헤더.
>> 그래서 지금의이으로 독서하자 주사선의 픽셀 단위.
다시 말하지만, 우리는 우리의 신뢰할 수 차례거야 I / O 라이브러리 파일 및보고
FREAD 기능.
FREAD는 구조체에 대한 포인터를 취 그 바이트를 포함하는 것
당신은에 읽고, 각의 크기 당신이 읽고있는 요소 -
다시, sizeof 연산자가 유용 할 것입니다 여기에 기능의 수
당신이다는 것을 크기, 사이즈의 요소, 그리고 마지막에 읽기,,
inpointer 파일이 당신은 읽기입니다.
그래서 당신은 수의 요소를 가지고있어 inpointer의 크기, 그리고
데이터에 넣어.
>> 지금은 수평으로 크기를 조정하는 시간이다.
N은 각 픽셀에 대해 그 다음,이 같으면 INFILE, 우리는 그것을 쓰는거야
두 번 OUTFILE에.
우리는 어떻게 파일을 작성하려면 어떻게해야합니까?
음, 우리는 fwrite는 기능이있다, 그래서 우리는 구조체 포인터를 촬영했습니다
그것은 당신이하고있는 바이트를 포함 에서 편지를 쓰고, 그리고, 우리는에 전달
크기, 개수 및 산출, 여기서 당신은을 쓰는 것입니다.
다음 과정을 반복하는 것이다 루프 수있는 간단한 반복.
>> 그러나 우리는 기억해야합니다 인치 여백을 추가하는 것
패딩의 개념은, 물론입니다 각 픽셀은 세 바이트이지만
각 주사선의 필수 크기 4 바이트의 배수.
그래서 화소 수 없으면 4의 배수는, 우리는 몇 가지를 추가해야
다만 제로 패딩입니다.
지금, 그것을 한 사람과는 달리,와 달리 복사 한 다음 INFILE 이미지와
OUTFILE 파일은 차이가있을 수있다 다른 패딩 그들이있어 때문에
다른 폭.
>> OK.
그래서 아마 공식 것 여기에 편리.
나는 그것을 알아내는 당신에게 남겨두고 있습니다 패딩을 작성하는 것을 당신에게,
물론, 그냥 간단한 fputc 기능의, 문자 전달
당신은 쓰고 싶은, 그리고 그 파일 포인터 당신
에 기록합니다.
그래서 지금 우리는, 수평 크기를 조정 한 것을 다음, 패딩을 사용
당신은 당신의 파일을 이동해야한다는 것을 기억 위치 표시, 당신 때문에
패딩에 FREAD 수 없습니다.
그래서 당신이 있는지 확인하려면 파일 INFILE의 위치 표시
정확한 지점에 있습니다.
우리는 또한 원하기 때문에 세로로 크기를 조정합니다.
우리는 단지, 수평으로 늘릴 수 없습니다 모든 행이 필요하기 때문에
N 번 복사 할 수 있습니다.
>> 이제 다른 여러 가지가 있습니다 이 작업을 수행하는 방법.
그래서 하나, 우리는에, 재 작성 방법을 사용할 수 있습니다 우리는 모든 화소를 기억해
주어진 배열의 행 및 우리는 그 배열을 쓰기
여러 번 필요에 따라.
또는 위치를 재 복사 방법이있다, INFILE의 한 행에 읽은 후에
다음 OUTFILE로 그를 작성, 패딩을 추가, 우리는 fseek의
원래 행의 시작에 백업, 다음 수평을 반복
거기에서 크기 조정.
방법에 관계없이, 그러나, 당신은거야 모든 픽셀을 반복 할
n 번, 모든 행이 될 또한 N 회 반복했다.
>> 그와 함께, 당신은 비트 맵을해야합니다 생명보다 더 큰.
내 이름은 Zamyla이며,이 CS50입니다.