>> [音樂播放]
>> ZAMYLA陳：讓我們一擊 事情並調整其大小。
在調整大小時，用戶將通過在通過 在命令行中，位圖圖像的
他們希望你擴展一個數字 他們還傳遞，
在命令行中。
我們怎麼做呢？
>> 嗯，首先第一件事情，讓我們 打破這種分解成步驟。
你將要打開的INFILE 他們給你，以及
創建並打開輸出文件的 你要放
調整後的影像英寸
然後，因為你調整大小和 因為它是一個位圖，它一個頭，所以
你要同時更新標題 信息的輸出文件，
並編寫英寸
然後，你要讀入 infile中的掃描線，
逐像素，水平縮放 和寫入這些像素進
輸出文件，指定 通過用戶的規模。
>> 你要記住， 添加填充物是必要的。
更多的後來。
然後，還調整垂直。
確定。
因此，這將是多一點點 複雜得多，做到了誰，但
什麼是相似的是，copy.c會， 再次，證明是非常有用的。
請記住，copy.c打開一個文件， 更新了的頭信息
輸出文件，然後讀入掃描線， 逐個像素，寫入每個像素
到輸出文件中的掃描線。
>> 所以，再一次，你的第一個步驟可能可能 是CP，copy.c，resize.c
到PSET5目錄。
但請記住，您複製它之前， 確保你了解
copy.c得很徹底。
確定。
>> 因此，讓我們打開一個文件。
你知道該怎麼做。
我要離開這個給你。
接著，更新的標題信息 為輸出文件。
因為我們有一個新的位圖， 我們有新的頭信息。
什麼改變嗎？
好了，文件的大小都不會改變 因為我們將有更多的
像素比以前。
圖像尺寸為，因此，也 要改變，因為是
寬度和高度。
>> 那麼哪些變量是那些，到底是什麼？
好吧，如果你直視頭 信息，你看到有
成員biSizeImage，它代表總 以字節為單位的圖像的大小，
包括像素和填充。
biWidth是圖像的寬度 以像素為單位減去填充。
biHeight是高度 圖像中的像素。
等等這些都包含在 結構BITMAPFILEHEADER和
BITMAPINFOHEADER。
你可以分辨出哪一個是由 要在bmp.h和看
BITMAPINFOHEADER結構和看 其中的變量被列在那裡。
>> 因此，要更新outfiles頭 信息，你會想
改變的那些價值觀 高度和寬度。
但機會是，你可能需要一些 的infile中的報頭信息
後來，所以最好是保持兩者的軌道。
但很清楚你的變量 名稱，以便您不小心
寫在不正確的值 為輸出文件的標頭。
>> 所以，現在讓我們來讀入 該掃描線的像素逐個像素。
再次，我們要談談我們的信賴 文件I / O庫，並期待在
是fread函數。
用fread接受一個指向結構的指針 將包含字節
您正在閱讀的，每一個的大小 元素，你正在閱讀 -
再次，的sizeof將是有用 這裡起作用，對數
的尺寸，大小的元素，你是 讀取中，然後最終的
inpointer，該文件是 您正在閱讀的。
所以，你正在做許多元素 從inpointer大小和
把它們轉換成數據。
>> 現在，是時候調整水平。
如果n等於2，則對每一個像素中 infile中，我們將它寫
兩次在輸出文件。
我們如何寫文件？
那麼，我們有fwrite函數，所以 我們已經採取了指針的struct
包含你的字節 從編寫，然後我們通過在
大小，數量，以及輸出端，其中 你將要編寫。
然後以重複的過程，將 能夠簡單迭代的for循環。
>> 但我們需要記住 添加填充英寸
填充的概念是，好了， 每個像素是3叮咬，但
每個掃描線必須大小 是4字節的倍數。
因此，如果像素的數目不是 4的倍數，我們需要添加一些
填充，這僅僅是零。
現在，不像做到了誰，而不像 副本，然後INFILE圖像和
輸出文件的文件有不同的有 不同的填充，因為他們是
不同的寬度。
>> 確定。
因此，也許一個公式會 在這裡派上用場。
我將它留給你找到它了，但 告訴你，寫填充，
好了，它只是一個簡單的fputc函數， 通過在字符
你想寫點什麼，然後 文件指針，你
要寫入。
所以，現在我們已經水平調整大小， 然後使用填充，
記住，你需要將你的文件 位置指示器，因為你
不能用fread到填充。
所以，你要確保你的文件 在INFILE位置指示器
是在正確的點。
因為我們也想 垂直調整大小。
我們不能只是它舒展水平， 因為每一行的需求
要複製n次。
>> 目前，有幾種不同的 方法可以做到這一點。
因此，人們，我們可以使用一個重寫的方法，在 我們記得所有的像素
的一個給定行中的陣列，並且 那麼我們該數組寫入作為
根據需要多次。
或有重新複製方法，其中， 讀一行在INFILE後
然後編寫到輸出文件， 添加填充，我們FSEEK
回到原來的行的開始， 然後重複水平
從那裡調整大小。
不論採用何種方法，雖然，你會 要重複每一個像素
n次，每排是 重複n次為好。
>> 就這樣，你就會有位圖 比生命更大。
我的名字是Zamyla，這是CS50。