>> [MUZYKA GRA]
>> Rob Bowden: Cześć, jestem Rob, niech spróbuj tego na rozmiar.
Więc znowu zaczynać z w zasadzie kopia copy.c i
dokonać kilku zmian.
Uwaga natychmiast widzimy zmiany, gdzie zamiast sprawdzając, czy
argc nie równa 3, chcemy sprawdzić jeśli argc nie równa 4, od
teraz nie jesteśmy po prostu biorąc w pliku wejściowego i plik_wy, ale jesteśmy także biorąc w
n, które jest kwota, którą jesteśmy skalowanie obrazu oryginalnego przez.
Gdy już jesteśmy pewni, że możemy po prostu przekonwertować na liczbę całkowitą n za pomocą atoi.
>> Tak, teraz mamy zamiar stworzyć jakiś aliasy, zadzwoń argv 2 pliku wejściowego i
argv 3 plik_wy, ponieważ argv 2 i argv 3 nie są bardzo pomocne nazwy.
Teraz chcemy sprawdzić, czy n jest w granicach oczekiwać, aby
specyfikacja określa, że ​​jeśli jest mniejsza lub zero lub większą niż 100.
to jest to nieprawidłowy współczynnik zmiany rozmiaru, i powinniśmy ostrzec użytkownika o tym.
>> Kiedy jesteś poza wszystko, co możemy w końcu otworzyć nasz plik_we i musimy
błędu upewnij się, że otwarcie nie powiedzie z jakiegoś powodu.
Musimy również otworzyć naszą pliku wynikowego, a ponownie błędu upewnij się, że
nie nie z jakiegoś powodu.
Ale pamiętaj, jeśli otwarcie plik_wy nie powiodło się, że musimy zamknąć
plik_we, który został już otwarty.
>> Tak więc, zakładając, że nie uda, to ale jesteśmy - tak jak w copy.c--
zamiar przeczytać w nagłówku z pliku wejściowego.
Jedziemy, aby upewnić się, że jest to ważne bitmapy, ale teraz mamy zamiar zrobić kilka
rzeczy nieco inaczej.
Więc po pierwsze, będziemy chcieli pamiętam oryginalnej szerokości i wysokości
z pliku wejściowego, ponieważ mamy zamiar się zmienić go na outfile.
Teraz należy pamiętać, że do dziwnych powodów bi.biheight, jest ujemna, a
więc rzeczywisty wzrost, w pozytywne, mamy chcesz wziąć wartość bezwzględną.
>> Teraz wypełnienia będzie taka sama Obliczenie, jak to było w copy.c,
przy użyciu starego szerokości, a teraz jesteśmy faktycznie się zmieni
to, co jest w naszym nagłówku.
Więc idziemy pomnożyć szerokość przez naszą n, ponieważ my przez skalowanie szerokości
n, pomnożyć wysokość przez n, ponieważ jesteśmy skalowanie przez n, a teraz mamy
obliczania nowej wyściółki oparty na nowej szerokości.
>> Teraz musimy zmienić niektóre Pozostałe pola w naszym nagłówku.
Bi.biSizeImage ma być Rozmiar wszystkich bajtów w pikselach
i dopełnienie obrazu.
I tak rozmiar pojedynczego wiersza z naszych Rozmiar obrazu RGB jest potrójna, rozmiar
pojedynczego piksela, ilość razy pikseli z rzędu, plus wypełnienie w
koniec wiersza.
A następnie jedziemy do pomnożyć przez wartość bezwzględna naszej wysokości, aby uzyskać
całkowitą liczbę bitów w danych obrazu.
bf.bfSize jest tylko łączna liczba bajtów w naszych danych obrazu, tak
bi.biSizeImage plus Wielkość naszych nagłówków.
Tak więc, dodanie od wielkości bitmapy nagłówek i rozmiar mapy bitowej informacji
nagłówek, OK.
Więc to wszystko musimy zmiany w naszych nagłówków.
Teraz piszemy nagłówek pliku bitmapy do naszego pliku wynikowego, a naszej informacji bitmapy
header do naszego pliku wynikowego, a teraz jesteśmy gotowi do rozpoczęcia będzie
na rzeczywistych pikseli.
>> Więc chcemy iteracyjnego linie skanowania plik_we jest.
Dlatego chcemy, aby iteracyjne nad oldheight.
To dlatego musimy pamiętać, oryginalna wysokość, zanim go zmienić
i skalowane go przez n.
Teraz mamy zamiar przeczytać wolny wiersz pliku wejściowego do
bufor o rozmiarze oldwidth.
Więc tutaj mamy freading rozmiar RGB trzyosobowe, jeden piksel, a stary szerokość
je z pliku wejściowego do naszego bufora.
I że będzie cały wiersz w tej tablicy.
Więc teraz, chcemy iteracji n razy do wydrukować ten wiersz do naszej outfile n razy.
A więc to, co ta pętla robi.
Ta wewnętrzna pętla jest iterowanie wiersz się, na tablicy, drukowanie
każdy piksel w tablicy n razy.
Więc elementem jest drukowane zerowe n razy, pierwszy element jest
drukowane n razy.
I to jest coś w rodzaju, jak będziemy poziomo skalowanie w outfile i
pętla, ponieważ mamy do pętli n razy, to w jaki sposób mamy zamiar
skala w pionie.
>> Tutaj widzimy, że musimy dodać Wyściółka na końcu każdego rzędu.
Dlatego to jest wewnątrz pętli for który jest drukowanie N wierszy tylko
ten wiersz z pliku wejściowego.
Potem tu, mam zamiar pominąć Wyściółka w pliku wejściowego, od razu
skończymy z jednym rzędem plik_we, nie dbamy o
co było wypełnienie.
Chcemy tylko, aby dostać się do drugiego rzędu.
A potem zawrócić i zrobić wszystko, jeszcze raz w drugim rzędzie.
>> Wreszcie, gdy już skończysz z tym wszystkim, możemy zamknąć plik_we, blisko
plik_wy i powrót 0 bo skończymy.
>> Nazywam się Rob, i to był resize.
>> [MUZYKA GRA]