1 00:00:00,000 --> 00:00:10,210 >> [MUSIC پخش] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA CHAN: ضربه بیایید چیزهایی که با تغییر اندازه. 3 00:00:13,320 --> 00:00:17,710 در تصویر، کاربر خواهد شد در، طریق خط فرمان، یک تصویر بیت مپ است که 4 00:00:17,710 --> 00:00:21,860 آنها می خواهند شما را به مقیاس توسط تعداد که آنها نیز در عبور، 5 00:00:21,860 --> 00:00:23,770 در خط فرمان. 6 00:00:23,770 --> 00:00:24,690 چگونه می توانم این کار می کنیم؟ 7 00:00:24,690 --> 00:00:28,270 >> خوب، همه چیز نخست نخست، اجازه دهید شکستن این به مراحل. 8 00:00:28,270 --> 00:00:31,510 شما در حال رفتن به می خواهید برای باز کردن INFILE که آنها به شما بدهد، و همچنین 9 00:00:31,510 --> 00:00:35,560 ایجاد و باز کردن outfile که شما به قرار دادن 10 00:00:35,560 --> 00:00:38,020 تصویر تغییر اندازه داده اید. 11 00:00:38,020 --> 00:00:42,050 سپس، دلیل این که شما در حال تغییر اندازه، و به دلیل آن است که یک بیت مپ، آن را یک ضربه سر، پس 12 00:00:42,050 --> 00:00:46,080 شما به هدر نیز به روز رسانی اطلاعات برای outfile، 13 00:00:46,080 --> 00:00:47,950 و ارسال است که در. 14 00:00:47,950 --> 00:00:51,850 سپس، شما در حال رفتن به عنوان خوانده شده به scanline از INFILE، 15 00:00:51,850 --> 00:00:56,890 پیکسل های پیکسل، تغییر اندازه به صورت افقی و نوشتن آن پیکسل به 16 00:00:56,890 --> 00:01:00,910 outfile، به عنوان مشخص توسط مقیاس کاربر است. 17 00:01:00,910 --> 00:01:03,940 >> شما به یاد داشته باشید اضافه کردن لایه در صورت لزوم. 18 00:01:03,940 --> 00:01:05,400 بیشتر در مورد که بعد از آن. 19 00:01:05,400 --> 00:01:07,790 و پس از آن، نیز به صورت عمودی تغییر اندازه. 20 00:01:07,790 --> 00:01:08,890 OK. 21 00:01:08,890 --> 00:01:13,280 پس این است برای رفتن به یک کمی بیشتر پیچیده تر از افراد آن انجام شود، اما 22 00:01:13,280 --> 00:01:18,310 چه چیزی شبیه است که copy.c خواهد شد، دوباره، ثابت بسیار مفید است. 23 00:01:18,310 --> 00:01:23,160 به یاد داشته باشید که copy.c یک فایل باز می شود، به روز رسانی اطلاعات هدر برای 24 00:01:23,160 --> 00:01:28,250 outfile، پس از آن به scanline بار خوانده شده، پیکسل های پیکسل، نوشتن هر پیکسل 25 00:01:28,250 --> 00:01:30,510 به scanline فایل خروجی است. 26 00:01:30,510 --> 00:01:37,040 >> بنابراین دوباره، اولین گام شما ممکن است احتمالا به CP، copy.c، resize.c است 27 00:01:37,040 --> 00:01:40,560 به دایرکتوری PSET5 شما. 28 00:01:40,560 --> 00:01:43,920 به یاد داشته باشید هر چند، قبل از شما آن را کپی کنید، مطمئن شوید که شما را در درک 29 00:01:43,920 --> 00:01:46,600 copy.c بسیار کامل. 30 00:01:46,600 --> 00:01:47,620 OK. 31 00:01:47,620 --> 00:01:49,880 >> بنابراین اجازه دهید یک فایل را باز کنید. 32 00:01:49,880 --> 00:01:50,870 شما می دانید که چگونه به انجام این کار. 33 00:01:50,870 --> 00:01:52,600 من قصد دارم به ترک است که به شما. 34 00:01:52,600 --> 00:01:56,050 بعدی، به روز رسانی اطلاعات هدر برای outfile. 35 00:01:56,050 --> 00:01:59,240 از آنجا که ما یک بیت مپ جدید، ما اطلاعات هدر جدید. 36 00:01:59,240 --> 00:02:00,970 چه در حال تغییر است که اینجا هستید؟ 37 00:02:00,970 --> 00:02:06,000 خوب، اندازه پرونده است که رفتن به تغییر از آنجا که ما در حال رفتن به تر 38 00:02:06,000 --> 00:02:07,900 پیکسل از قبل. 39 00:02:07,900 --> 00:02:11,060 اندازه تصویر است، در نتیجه، هم رفتن به تغییر، به عنوان است 40 00:02:11,060 --> 00:02:13,050 عرض و ارتفاع. 41 00:02:13,050 --> 00:02:17,180 >> بنابراین که متغیر آن هستند، دقیقا؟ 42 00:02:17,180 --> 00:02:20,960 خوب، اگر شما به هدر نگاه اطلاعات، شما ببینید که وجود دارد است 43 00:02:20,960 --> 00:02:25,640 biSizeImage، که نشان دهنده کل اندازه تصویر در بایت، 44 00:02:25,640 --> 00:02:28,340 از جمله پیکسل و پد. 45 00:02:28,340 --> 00:02:32,520 biWidth عرض تصویر است در پیکسل، منهای پد. 46 00:02:32,520 --> 00:02:35,580 biHeight ارتفاع است تصویر را در پیکسل. 47 00:02:35,580 --> 00:02:39,200 و به این ترتیب کسانی که در موجود ساختار BITMAPFILEHEADER و 48 00:02:39,200 --> 00:02:40,390 BITMAPINFOHEADER. 49 00:02:40,390 --> 00:02:45,300 شما می توانید بگویید که کدام یک است که توسط رفتن به bmp.h و نگاه به 50 00:02:45,300 --> 00:02:49,670 ساختار BITMAPINFOHEADER و دیدن که متغیر ها وجود دارد ذکر شده است. 51 00:02:49,670 --> 00:02:54,700 >> بنابراین برای به روز رسانی هدر outfiles اطلاعات، شما در حال رفتن به می خواهم به 52 00:02:54,700 --> 00:02:57,025 تغییر این مقادیر از ارتفاع و عرض. 53 00:02:57,025 --> 00:03:00,570 اما شانس هستند، شما ممکن است برخی نیاز اطلاعات هدر INFILE است 54 00:03:00,570 --> 00:03:03,670 بعد از آن، بنابراین بهترین برای پیگیری از هر دو. 55 00:03:03,670 --> 00:03:07,770 اما با متغیر خود را بسیار روشن نام طوری که شما نمی طور تصادفی 56 00:03:07,770 --> 00:03:12,490 ارسال مقادیر نادرست در هدر برای outfile. 57 00:03:12,490 --> 00:03:16,160 >> بنابراین در حال حاضر اجازه دهید به خواندن را دریافت کنید scanline پیکسل با پیکسل. 58 00:03:16,160 --> 00:03:20,210 باز هم، ما قصد داریم به نوبه خود به قابل اعتماد ما فایل I / O کتابخانه، و در نگاه 59 00:03:20,210 --> 00:03:22,100 تابع از fread. 60 00:03:22,100 --> 00:03:26,150 از fread طول می کشد در یک اشاره گر به ساختار که کلمه در ادامه متن شامل است که 61 00:03:26,150 --> 00:03:30,130 شما در حال خواندن در، اندازه هر یک از عنصری است که شما در حال خواندن - 62 00:03:30,130 --> 00:03:34,410 دوباره، sizeof است که مفید باشد کار در اینجا، تعداد 63 00:03:34,410 --> 00:03:38,820 عناصر اندازه، اندازه، که شما هستید خواندن در، و سپس در نهایت، 64 00:03:38,820 --> 00:03:41,310 inpointer، فایل است که شما از خواندن. 65 00:03:41,310 --> 00:03:46,770 بنابراین شما مصرف عناصر شماره از اندازه از inpointer، و 66 00:03:46,770 --> 00:03:49,040 قرار دادن آنها را داده است. 67 00:03:49,040 --> 00:03:51,695 >> حالا وقت برای تغییر اندازه به صورت افقی آن را. 68 00:03:51,695 --> 00:03:56,880 اگر n برابر 2، و سپس برای هر پیکسل در INFILE، ما قصد داریم به آن ارسال 69 00:03:56,880 --> 00:04:00,870 دو بار در outfile. 70 00:04:00,870 --> 00:04:02,210 چگونه می توانم فایل های ما ارسال؟ 71 00:04:02,210 --> 00:04:06,400 خب، ما باید تابع fwrite، بنابراین ما یک اشاره گر به ساختار گرفته شده 72 00:04:06,400 --> 00:04:10,170 که شامل کلمه در ادامه متن است که شما نوشتن از، و پس از آن ما عبور در 73 00:04:10,170 --> 00:04:14,430 اندازه، تعداد و خروجی، که در آن شما به نوشتن است که. 74 00:04:14,430 --> 00:04:19,200 و پس از آن به تکرار فرایند، خواهد بود قادر تکراری ساده برای حلقه. 75 00:04:19,200 --> 00:04:21,740 >> اما ما باید به یاد داشته باشید برای اضافه کردن بالشتک شوید 76 00:04:21,740 --> 00:04:26,040 مفهوم لایه است که، خوب، هر پیکسل از سه گزش است، اما 77 00:04:26,040 --> 00:04:28,940 اندازه هر یک باید scanline یک چند از 4 بایت. 78 00:04:28,940 --> 00:04:33,660 بنابراین اگر تعداد پیکسل ها نمی باشد. مضربی از 4، ما نیاز به اضافه کردن برخی از 79 00:04:33,660 --> 00:04:36,630 بالشتک، که فقط صفر. 80 00:04:36,630 --> 00:04:42,130 در حال حاضر، بر خلاف که آن را انجام داده، و بر خلاف کپی، و سپس تصویر INFILE و 81 00:04:42,130 --> 00:04:44,370 فایل outfile اند متفاوت لایه های مختلف چون آنها 82 00:04:44,370 --> 00:04:46,360 عرض متفاوت است. 83 00:04:46,360 --> 00:04:46,690 >> OK. 84 00:04:46,690 --> 00:04:51,050 بنابراین شاید یک فرمول را در مفید آمده است در اینجا. 85 00:04:51,050 --> 00:04:55,120 من آن را به شما را به پیدا کردن آن است، اما به شما بگویم که، برای نوشتن پد، 86 00:04:55,120 --> 00:04:59,360 خوب، آن را فقط یک تابع fputc ساده است، عبور در شخصیت 87 00:04:59,360 --> 00:05:02,200 که شما می خواهید برای نوشتن، و پس از آن اشاره گر فایل که شما 88 00:05:02,200 --> 00:05:04,280 می خواهم به ارسال به. 89 00:05:04,280 --> 00:05:08,670 بنابراین در حال حاضر که ما به صورت افقی تغییر کرده ام، و پس از آن استفاده از Padding، 90 00:05:08,670 --> 00:05:12,030 به یاد داشته باشید که شما نیاز به انتقال فایل های خود را نشان دهنده موقعیت، به خاطر شما 91 00:05:12,030 --> 00:05:14,480 نمی تواند به لایه از fread. 92 00:05:14,480 --> 00:05:18,230 بنابراین شما می خواهید مطمئن شوید که فایل شما نشان دهنده موقعیت در INFILE 93 00:05:18,230 --> 00:05:19,980 است در نقطه درست است. 94 00:05:19,980 --> 00:05:23,970 از آنجا که ما همچنین می خواهم تغییر اندازه به صورت عمودی. 95 00:05:23,970 --> 00:05:27,090 ما نمی توانیم فقط آن را کشش افقی، زیرا هر نیاز ردیف 96 00:05:27,090 --> 00:05:30,370 برای بار N کپی شده است. 97 00:05:30,370 --> 00:05:33,050 >> در حال حاضر، چند مختلف وجود دارد راه برای انجام این کار. 98 00:05:33,050 --> 00:05:39,010 بنابراین، ما می تواند یک روش بازنویسی استفاده کنید، در که ما به یاد داشته باشید تمام پیکسل 99 00:05:39,010 --> 00:05:42,840 از یک ردیف داده شده در یک آرایه، و پس از آن ما ارسال که آرایه به عنوان 100 00:05:42,840 --> 00:05:44,730 چند بار که مورد نیاز است. 101 00:05:44,730 --> 00:05:49,530 یا روش recopy که در آن وجود دارد، بعد از خواندن در یک ردیف در INFILE 102 00:05:49,530 --> 00:05:53,530 و پس از آن نوشتن است که به outfile، اضافه کردن بالشتک، ما fseek 103 00:05:53,530 --> 00:05:57,250 بازگشت به ابتدای سطر اصلی، و پس از آن تکرار افقی 104 00:05:57,250 --> 00:05:58,710 تغییر اندازه وجود دارد. 105 00:05:58,710 --> 00:06:02,280 صرف نظر از این روش، هر چند، شما می خواهم هر پیکسل باید تکرار شود 106 00:06:02,280 --> 00:06:06,370 N بار، و هر سطر به بار نفر تکرار نیز هست. 107 00:06:06,370 --> 00:06:09,160 >> با آن، شما بیت مپ داشته بزرگتر از زندگی. 108 00:06:09,160 --> 00:06:11,760 نام من Zamyla است، و این CS50 است. 109 00:06:11,760 --> 00:06:19,542