1 00:00:00,000 --> 00:00:12,240 >> [MUZYKA GRA] 2 00:00:12,240 --> 00:00:15,870 >> Rob Bowden: Cześć, jestem Rob, niech spróbuj tego na rozmiar. 3 00:00:15,870 --> 00:00:21,100 Więc znowu zaczynać z w zasadzie kopia copy.c i 4 00:00:21,100 --> 00:00:22,860 dokonać kilku zmian. 5 00:00:22,860 --> 00:00:26,280 Uwaga natychmiast widzimy zmiany, gdzie zamiast sprawdzając, czy 6 00:00:26,280 --> 00:00:30,440 argc nie równa 3, chcemy sprawdzić jeśli argc nie równa 4, od 7 00:00:30,440 --> 00:00:34,350 teraz nie jesteśmy po prostu biorąc w pliku wejściowego i plik_wy, ale jesteśmy także biorąc w 8 00:00:34,350 --> 00:00:38,980 n, które jest kwota, którą jesteśmy skalowanie obrazu oryginalnego przez. 9 00:00:38,980 --> 00:00:44,340 Gdy już jesteśmy pewni, że możemy po prostu przekonwertować na liczbę całkowitą n za pomocą atoi. 10 00:00:44,340 --> 00:00:48,760 >> Tak, teraz mamy zamiar stworzyć jakiś aliasy, zadzwoń argv 2 pliku wejściowego i 11 00:00:48,760 --> 00:00:54,240 argv 3 plik_wy, ponieważ argv 2 i argv 3 nie są bardzo pomocne nazwy. 12 00:00:54,240 --> 00:00:58,510 Teraz chcemy sprawdzić, czy n jest w granicach oczekiwać, aby 13 00:00:58,510 --> 00:01:02,910 specyfikacja określa, że ​​jeśli jest mniejsza lub zero lub większą niż 100. 14 00:01:02,910 --> 00:01:08,580 to jest to nieprawidłowy współczynnik zmiany rozmiaru, i powinniśmy ostrzec użytkownika o tym. 15 00:01:08,580 --> 00:01:13,090 >> Kiedy jesteś poza wszystko, co możemy w końcu otworzyć nasz plik_we i musimy 16 00:01:13,090 --> 00:01:16,270 błędu upewnij się, że otwarcie nie powiedzie z jakiegoś powodu. 17 00:01:16,270 --> 00:01:19,860 Musimy również otworzyć naszą pliku wynikowego, a ponownie błędu upewnij się, że 18 00:01:19,860 --> 00:01:21,250 nie nie z jakiegoś powodu. 19 00:01:21,250 --> 00:01:26,270 Ale pamiętaj, jeśli otwarcie plik_wy nie powiodło się, że musimy zamknąć 20 00:01:26,270 --> 00:01:29,040 plik_we, który został już otwarty. 21 00:01:29,040 --> 00:01:33,690 >> Tak więc, zakładając, że nie uda, to ale jesteśmy - tak jak w copy.c-- 22 00:01:33,690 --> 00:01:36,140 zamiar przeczytać w nagłówku z pliku wejściowego. 23 00:01:36,140 --> 00:01:40,130 Jedziemy, aby upewnić się, że jest to ważne bitmapy, ale teraz mamy zamiar zrobić kilka 24 00:01:40,130 --> 00:01:41,620 rzeczy nieco inaczej. 25 00:01:41,620 --> 00:01:44,870 Więc po pierwsze, będziemy chcieli pamiętam oryginalnej szerokości i wysokości 26 00:01:44,870 --> 00:01:48,290 z pliku wejściowego, ponieważ mamy zamiar się zmienić go na outfile. 27 00:01:48,290 --> 00:01:53,890 Teraz należy pamiętać, że do dziwnych powodów bi.biheight, jest ujemna, a 28 00:01:53,890 --> 00:01:58,670 więc rzeczywisty wzrost, w pozytywne, mamy chcesz wziąć wartość bezwzględną. 29 00:01:58,670 --> 00:02:02,580 >> Teraz wypełnienia będzie taka sama Obliczenie, jak to było w copy.c, 30 00:02:02,580 --> 00:02:06,060 przy użyciu starego szerokości, a teraz jesteśmy faktycznie się zmieni 31 00:02:06,060 --> 00:02:07,320 to, co jest w naszym nagłówku. 32 00:02:07,320 --> 00:02:11,200 Więc idziemy pomnożyć szerokość przez naszą n, ponieważ my przez skalowanie szerokości 33 00:02:11,200 --> 00:02:15,100 n, pomnożyć wysokość przez n, ponieważ jesteśmy skalowanie przez n, a teraz mamy 34 00:02:15,100 --> 00:02:19,250 obliczania nowej wyściółki oparty na nowej szerokości. 35 00:02:19,250 --> 00:02:21,840 >> Teraz musimy zmienić niektóre Pozostałe pola w naszym nagłówku. 36 00:02:21,840 --> 00:02:26,890 Bi.biSizeImage ma być Rozmiar wszystkich bajtów w pikselach 37 00:02:26,890 --> 00:02:28,520 i dopełnienie obrazu. 38 00:02:28,520 --> 00:02:34,190 I tak rozmiar pojedynczego wiersza z naszych Rozmiar obrazu RGB jest potrójna, rozmiar 39 00:02:34,190 --> 00:02:39,430 pojedynczego piksela, ilość razy pikseli z rzędu, plus wypełnienie w 40 00:02:39,430 --> 00:02:40,910 koniec wiersza. 41 00:02:40,910 --> 00:02:45,200 A następnie jedziemy do pomnożyć przez wartość bezwzględna naszej wysokości, aby uzyskać 42 00:02:45,200 --> 00:02:48,350 całkowitą liczbę bitów w danych obrazu. 43 00:02:48,350 --> 00:02:53,050 bf.bfSize jest tylko łączna liczba bajtów w naszych danych obrazu, tak 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage plus Wielkość naszych nagłówków. 45 00:02:56,530 --> 00:02:59,850 Tak więc, dodanie od wielkości bitmapy nagłówek i rozmiar mapy bitowej informacji 46 00:02:59,850 --> 00:03:00,800 nagłówek, OK. 47 00:03:00,800 --> 00:03:03,170 Więc to wszystko musimy zmiany w naszych nagłówków. 48 00:03:03,170 --> 00:03:07,020 Teraz piszemy nagłówek pliku bitmapy do naszego pliku wynikowego, a naszej informacji bitmapy 49 00:03:07,020 --> 00:03:09,880 header do naszego pliku wynikowego, a teraz jesteśmy gotowi do rozpoczęcia będzie 50 00:03:09,880 --> 00:03:11,990 na rzeczywistych pikseli. 51 00:03:11,990 --> 00:03:15,720 >> Więc chcemy iteracyjnego linie skanowania plik_we jest. 52 00:03:15,720 --> 00:03:17,730 Dlatego chcemy, aby iteracyjne nad oldheight. 53 00:03:17,730 --> 00:03:20,830 To dlatego musimy pamiętać, oryginalna wysokość, zanim go zmienić 54 00:03:20,830 --> 00:03:23,040 i skalowane go przez n. 55 00:03:23,040 --> 00:03:27,810 Teraz mamy zamiar przeczytać wolny wiersz pliku wejściowego do 56 00:03:27,810 --> 00:03:30,630 bufor o rozmiarze oldwidth. 57 00:03:30,630 --> 00:03:36,190 Więc tutaj mamy freading rozmiar RGB trzyosobowe, jeden piksel, a stary szerokość 58 00:03:36,190 --> 00:03:39,760 je z pliku wejściowego do naszego bufora. 59 00:03:39,760 --> 00:03:43,480 I że będzie cały wiersz w tej tablicy. 60 00:03:43,480 --> 00:03:50,390 Więc teraz, chcemy iteracji n razy do wydrukować ten wiersz do naszej outfile n razy. 61 00:03:50,390 --> 00:03:52,510 A więc to, co ta pętla robi. 62 00:03:52,510 --> 00:03:57,910 Ta wewnętrzna pętla jest iterowanie wiersz się, na tablicy, drukowanie 63 00:03:57,910 --> 00:04:00,710 każdy piksel w tablicy n razy. 64 00:04:00,710 --> 00:04:04,510 Więc elementem jest drukowane zerowe n razy, pierwszy element jest 65 00:04:04,510 --> 00:04:05,660 drukowane n razy. 66 00:04:05,660 --> 00:04:10,820 I to jest coś w rodzaju, jak będziemy poziomo skalowanie w outfile i 67 00:04:10,820 --> 00:04:13,390 pętla, ponieważ mamy do pętli n razy, to w jaki sposób mamy zamiar 68 00:04:13,390 --> 00:04:15,580 skala w pionie. 69 00:04:15,580 --> 00:04:19,850 >> Tutaj widzimy, że musimy dodać Wyściółka na końcu każdego rzędu. 70 00:04:19,850 --> 00:04:25,050 Dlatego to jest wewnątrz pętli for który jest drukowanie N wierszy tylko 71 00:04:25,050 --> 00:04:28,400 ten wiersz z pliku wejściowego. 72 00:04:28,400 --> 00:04:32,150 Potem tu, mam zamiar pominąć Wyściółka w pliku wejściowego, od razu 73 00:04:32,150 --> 00:04:34,560 skończymy z jednym rzędem plik_we, nie dbamy o 74 00:04:34,560 --> 00:04:35,290 co było wypełnienie. 75 00:04:35,290 --> 00:04:37,110 Chcemy tylko, aby dostać się do drugiego rzędu. 76 00:04:37,110 --> 00:04:40,870 A potem zawrócić i zrobić wszystko, jeszcze raz w drugim rzędzie. 77 00:04:40,870 --> 00:04:44,406 >> Wreszcie, gdy już skończysz z tym wszystkim, możemy zamknąć plik_we, blisko 78 00:04:44,406 --> 00:04:47,430 plik_wy i powrót 0 bo skończymy. 79 00:04:47,430 --> 00:04:50,330 >> Nazywam się Rob, i to był resize. 80 00:04:50,330 --> 00:04:54,934 >> [MUZYKA GRA]