[MUSIC پخش] ZAMYLA CHAN: ضربه بیایید چیزهایی که با تغییر اندازه. در تصویر، کاربر خواهد شد در، طریق خط فرمان، یک تصویر بیت مپ است که آنها می خواهند شما را به مقیاس توسط تعداد که آنها نیز در عبور، در خط فرمان. چگونه می توانم این کار می کنیم؟ خوب، همه چیز نخست نخست، اجازه دهید شکستن این به مراحل. شما در حال رفتن به می خواهید برای باز کردن INFILE که آنها به شما بدهد، و همچنین ایجاد و باز کردن outfile که شما به قرار دادن تصویر تغییر اندازه داده اید. سپس، دلیل این که شما در حال تغییر اندازه، و به دلیل آن است که یک بیت مپ، آن را یک ضربه سر، پس شما به هدر نیز به روز رسانی اطلاعات برای outfile، و ارسال است که در. سپس، شما در حال رفتن به عنوان خوانده شده به scanline از INFILE، پیکسل های پیکسل، تغییر اندازه به صورت افقی و نوشتن آن پیکسل به outfile، به عنوان مشخص توسط مقیاس کاربر است. شما به یاد داشته باشید اضافه کردن لایه در صورت لزوم. بیشتر در مورد که بعد از آن. و پس از آن، نیز به صورت عمودی تغییر اندازه. OK. پس این است برای رفتن به یک کمی بیشتر پیچیده تر از افراد آن انجام شود، اما چه چیزی شبیه است که copy.c خواهد شد، دوباره، ثابت بسیار مفید است. به یاد داشته باشید که copy.c یک فایل باز می شود، به روز رسانی اطلاعات هدر برای outfile، پس از آن به scanline بار خوانده شده، پیکسل های پیکسل، نوشتن هر پیکسل به scanline فایل خروجی است. بنابراین دوباره، اولین گام شما ممکن است احتمالا به CP، copy.c، resize.c است به دایرکتوری PSET5 شما. به یاد داشته باشید هر چند، قبل از شما آن را کپی کنید، مطمئن شوید که شما را در درک copy.c بسیار کامل. OK. بنابراین اجازه دهید یک فایل را باز کنید. شما می دانید که چگونه به انجام این کار. من قصد دارم به ترک است که به شما. بعدی، به روز رسانی اطلاعات هدر برای outfile. از آنجا که ما یک بیت مپ جدید، ما اطلاعات هدر جدید. چه در حال تغییر است که اینجا هستید؟ خوب، اندازه پرونده است که رفتن به تغییر از آنجا که ما در حال رفتن به تر پیکسل از قبل. اندازه تصویر است، در نتیجه، هم رفتن به تغییر، به عنوان است عرض و ارتفاع. بنابراین که متغیر آن هستند، دقیقا؟ خوب، اگر شما به هدر نگاه اطلاعات، شما ببینید که وجود دارد است biSizeImage، که نشان دهنده کل اندازه تصویر در بایت، از جمله پیکسل و پد. biWidth عرض تصویر است در پیکسل، منهای پد. biHeight ارتفاع است تصویر را در پیکسل. و به این ترتیب کسانی که در موجود ساختار BITMAPFILEHEADER و BITMAPINFOHEADER. شما می توانید بگویید که کدام یک است که توسط رفتن به bmp.h و نگاه به ساختار BITMAPINFOHEADER و دیدن که متغیر ها وجود دارد ذکر شده است. بنابراین برای به روز رسانی هدر outfiles اطلاعات، شما در حال رفتن به می خواهم به تغییر این مقادیر از ارتفاع و عرض. اما شانس هستند، شما ممکن است برخی نیاز اطلاعات هدر INFILE است بعد از آن، بنابراین بهترین برای پیگیری از هر دو. اما با متغیر خود را بسیار روشن نام طوری که شما نمی طور تصادفی ارسال مقادیر نادرست در هدر برای outfile. بنابراین در حال حاضر اجازه دهید به خواندن را دریافت کنید scanline پیکسل با پیکسل. باز هم، ما قصد داریم به نوبه خود به قابل اعتماد ما فایل I / O کتابخانه، و در نگاه تابع از fread. از fread طول می کشد در یک اشاره گر به ساختار که کلمه در ادامه متن شامل است که شما در حال خواندن در، اندازه هر یک از عنصری است که شما در حال خواندن - دوباره، sizeof است که مفید باشد کار در اینجا، تعداد عناصر اندازه، اندازه، که شما هستید خواندن در، و سپس در نهایت، inpointer، فایل است که شما از خواندن. بنابراین شما مصرف عناصر شماره از اندازه از inpointer، و قرار دادن آنها را داده است. حالا وقت برای تغییر اندازه به صورت افقی آن را. اگر n برابر 2، و سپس برای هر پیکسل در INFILE، ما قصد داریم به آن ارسال دو بار در outfile. چگونه می توانم فایل های ما ارسال؟ خب، ما باید تابع fwrite، بنابراین ما یک اشاره گر به ساختار گرفته شده که شامل کلمه در ادامه متن است که شما نوشتن از، و پس از آن ما عبور در اندازه، تعداد و خروجی، که در آن شما به نوشتن است که. و پس از آن به تکرار فرایند، خواهد بود قادر تکراری ساده برای حلقه. اما ما باید به یاد داشته باشید برای اضافه کردن بالشتک شوید مفهوم لایه است که، خوب، هر پیکسل از سه گزش است، اما اندازه هر یک باید scanline یک چند از 4 بایت. بنابراین اگر تعداد پیکسل ها نمی باشد. مضربی از 4، ما نیاز به اضافه کردن برخی از بالشتک، که فقط صفر. در حال حاضر، بر خلاف که آن را انجام داده، و بر خلاف کپی، و سپس تصویر INFILE و فایل outfile اند متفاوت لایه های مختلف چون آنها عرض متفاوت است. OK. بنابراین شاید یک فرمول را در مفید آمده است در اینجا. من آن را به شما را به پیدا کردن آن است، اما به شما بگویم که، برای نوشتن پد، خوب، آن را فقط یک تابع fputc ساده است، عبور در شخصیت که شما می خواهید برای نوشتن، و پس از آن اشاره گر فایل که شما می خواهم به ارسال به. بنابراین در حال حاضر که ما به صورت افقی تغییر کرده ام، و پس از آن استفاده از Padding، به یاد داشته باشید که شما نیاز به انتقال فایل های خود را نشان دهنده موقعیت، به خاطر شما نمی تواند به لایه از fread. بنابراین شما می خواهید مطمئن شوید که فایل شما نشان دهنده موقعیت در INFILE است در نقطه درست است. از آنجا که ما همچنین می خواهم تغییر اندازه به صورت عمودی. ما نمی توانیم فقط آن را کشش افقی، زیرا هر نیاز ردیف برای بار N کپی شده است. در حال حاضر، چند مختلف وجود دارد راه برای انجام این کار. بنابراین، ما می تواند یک روش بازنویسی استفاده کنید، در که ما به یاد داشته باشید تمام پیکسل از یک ردیف داده شده در یک آرایه، و پس از آن ما ارسال که آرایه به عنوان چند بار که مورد نیاز است. یا روش recopy که در آن وجود دارد، بعد از خواندن در یک ردیف در INFILE و پس از آن نوشتن است که به outfile، اضافه کردن بالشتک، ما fseek بازگشت به ابتدای سطر اصلی، و پس از آن تکرار افقی تغییر اندازه وجود دارد. صرف نظر از این روش، هر چند، شما می خواهم هر پیکسل باید تکرار شود N بار، و هر سطر به بار نفر تکرار نیز هست. با آن، شما بیت مپ داشته بزرگتر از زندگی. نام من Zamyla است، و این CS50 است.