[MUZYKA GRA] ZAMYLA Chandler: Miejmy cios rzeczy z rozmiaru. W zmianą rozmiaru, użytkownik przejdzie w, poprzez linii poleceń, obraz bitmapowy, który chcą skalowanie przez szereg że również przejść w, w wierszu poleceń. W jaki sposób możemy to zrobić? Cóż, po pierwsze rzeczy pierwsze, niech podzielenie go na etapy. Będziesz chciał otworzyć plik_we że dają ci, jak również tworzyć i otwierać outfile że masz zamiar umieścić Zmniejszone zdjęcie w. Następnie, ponieważ jesteś zmiany rozmiaru i bo to bitmapy, to nagłówek, więc będziesz również zaktualizować nagłówek Informacje dla pliku wynikowego, i pisać, że w. Potem idziesz do zapoznania się SCANLINE z pliku wejściowego, piksel po pikselu, zmiana rozmiaru w poziomie i pisania tych pikseli w plik_wy, jak określono według skali użytkownika. Będziesz pamiętać, aby dodać dopełnienie w razie potrzeby. Więcej o tym później. A następnie, również zmienić rozmiar w pionie. OK. Więc to będzie trochę więcej skomplikowane niż Kto zrobił, ale co podobne jest, że copy.c będzie, znowu okazać się bardzo przydatne. Pamiętaj, że copy.c otwiera plik, aktualizuje informacje nagłówka dla plik_wy, następnie odczytuje do scanline, piksel po pikselu, pisząc każdy piksel do scanline pliku wyjściowego za. Więc jeszcze raz, może pierwszy krok prawdopodobnie być cp, copy.c, resize.c do katalogu PSET5. Pamiętaj jednak, zanim go skopiować, aby upewnić się, że rozumiesz copy.c bardzo dokładnie. OK. Warto więc otworzyć plik. Wiesz, jak to zrobić. Zamierzam opuścić to do ciebie. Następnie zaktualizować informacje z nagłówka dla outfile. Bo mamy nową bitmapę, mamy nowe informacje nagłówka. Co się zmienia tutaj? Cóż, rozmiar pliku się zmieni bo będziemy mieć więcej pikseli niż wcześniej. Rozmiar obrazu jest więc również ulegnie zmianie, co jest szerokość i wysokość. Więc, które zmienne są te, dokładnie? Cóż, jeśli spojrzeć w nagłówku informacje, widać nie jest biSizeImage, co stanowi sumę rozmiar obrazu w bajtach, tym pikseli i obicia. biWidth jest szerokość obrazu w pikselach, minus wyściółka. biHeight jest wysokość obrazu w pikselach. I tak te zawarte są w elemencie BITMAPFILEHEADER i BITMAPINFOHEADER. Można powiedzieć, który z nich jest który przez będzie bmp.h i patrząc na BITMAPINFOHEADER struktura i widzenie które zmienne są wymienione tam. Tak, aby zaktualizować outfiles nagłówek informacje, będziesz chciał zmienić te wartości wysokość i szerokość. Ale są szanse, może trzeba jakiś informacji w nagłówku plik_we później, więc najlepiej, aby śledzić oba. Ale być bardzo jasne, z zmiennej nazwy tak, że nie przypadkowo Napisać nieprawidłowe wartości w Nagłówek dla outfile. Teraz przejdźmy do czytania w SCANLINE piksel po pikselu. Ponownie mamy zamiar włączyć do naszego trusty plik biblioteki I / O, i spojrzeć na fread funkcji. fread odbywa się wskaźnik do struktury , który zawiera bajty czytasz w wielkość każdego Element, który czytasz - kolejny sizeof będzie użyteczny funkcjonują tu szereg elementy formatu, rozmiaru, których jesteś wczytywanie, a następnie ostatecznie inpointer, plik czytasz od. Więc bierzesz elementów numerycznych od wielkości i od inpointer wprowadzenie ich do danych. Teraz nadszedł czas, aby zmienić rozmiar w poziomie. gdy n jest równe 2, to dla każdego piksela plik_we, mamy zamiar napisać dwa razy w plik wyjściowy. Jak piszemy pliki? Cóż, mamy funkcję fwrite, więc podjęliśmy wskaźnik do struktury że zawiera bajtów, że jesteś piśmie z, a następnie przechodzimy w wielkość, ilość i moc, gdzie masz zamiar pisać, że. A następnie powtórzyć proces, będzie stanie proste iteracyjny dla pętli. Ale musimy pamiętać, dodać dopełnienie w. Pojęcie wypełnienia jest, że dobrze, Każdy piksel ma trzy ugryzienia, ale Rozmiar każdego moszczu Scanline być wielokrotnością 4 bajtów. Tak więc, jeśli liczba pikseli jest wielokrotnością 4, musimy dodać kilka wyściółka, która znajduje się zaledwie zera. Teraz, w przeciwieństwie Kto zrobił, iw przeciwieństwie do kopię, a następnie plik_we obrazu i plik_wy plik ma się inaczej inaczej, ponieważ są wyściółka różne szerokości. OK. Więc może formuła się przydać tutaj. Zostawię to do Ciebie, aby dowiedzieć się, ale powiedzieć, że do napisania dopełnienie, dobrze, że to tylko prosta funkcja fputc, przechodząc w charakterze , które chcesz napisać, a następnie wskaźnik pliku, który chcę napisać do. Więc teraz, kiedy zmieniany poziomo, , a następnie stosuje się wkładki, pamiętaj, że trzeba przenieść plik wskaźnik położenia, ponieważ nie może fread do wypełnienia. Więc chcesz, aby upewnić się, że plik wskaźnik pozycji w pliku wejściowego znajduje się w odpowiednim miejscu. Ponieważ chcemy również rozmiar w pionie. Nie możemy po prostu rozciągnąć poziomo, bo każdy rząd potrzebuje do skopiowania n razy. Teraz istnieje kilka różnych sposobów, aby to zrobić. Tak jeden, możemy użyć metody przepisywania, w że pamiętamy wszystkie piksele danego wiersza w tablicy, i Następnie piszemy tę tablicę jako tyle razy, ile potrzeba. Czy istnieje sposób ponownie skopiować gdzie, Po przeczytaniu w jednym rzędzie w pliku wejściowego i piśmie, że do pliku wynikowego, dodając dopełnienie, my fseek powrotem do początku pierwotnego rzędu a następnie powtórz poziomej zmiana rozmiaru stamtąd. Niezależnie od stosowanej metody, chociaż, LL aby każdy piksel być powtarzane n razy, a każdy wiersz jest powtarzane n razy, jak również. Z tym, będziesz miał bitmapy większa niż życie. Nazywam się Zamyla, i to jest CS50.