1 00:00:00,000 --> 00:00:10,210 >> [მუსიკის დაკვრა] 2 00:00:10,210 --> 00:00:13,320 >> Zamyla CHAN: მოდით დარტყმა რამ ერთად ზომა. 3 00:00:13,320 --> 00:00:17,710 In ზომა, მომხმარებლის გაივლის მეშვეობით ბრძანების, bitmap გამოსახულება, რომელიც 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 მაშინ, იმიტომ, რომ თქვენ resizing და იმიტომ, რომ bitmap, იგი თავით, ისე 12 00:00:42,050 --> 00:00:46,080 თქვენ აპირებს ასევე განაახლოს header ინფორმაცია 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 pixel-by-pixel, resizing ჰორიზონტალურად და წერა იმ pixels შევიდა 16 00:00:56,890 --> 00:01:00,910 outfile, როგორც ეს განსაზღვრულია მომხმარებლის მიერ მასშტაბი. 17 00:01:00,910 --> 00:01:03,940 >> თქვენ აპირებს გვახსოვდეს რჩეულებში padding, როგორც საჭიროა. 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 იხსნება ფაილი, განახლებები header ინფორმაცია 24 00:01:23,160 --> 00:01:28,250 outfile, კითხულობს შევიდა scanline, pixel-by-pixel, წერა ყოველ pixel 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 შემდეგი, განაახლოს header ინფორმაცია ამისთვის outfile. 35 00:01:56,050 --> 00:01:59,240 იმის გამო, რომ ჩვენ გვაქვს ახალი bitmap, ჩვენ new header ინფორმაცია. 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 pixels, ვიდრე ადრე. 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 ისე, თუ გადავხედავთ შევიდა header ინფორმაცია, ხედავთ არის 43 00:02:20,960 --> 00:02:25,640 biSizeImage, რომელიც წარმოადგენს საერთო ზომა იმიჯი ბაიტი, 44 00:02:25,640 --> 00:02:28,340 მათ შორის პიქსელი და padding. 45 00:02:28,340 --> 00:02:32,520 biWidth არის სიგანე გამოსახულება პიქსელებში, მინუს padding. 46 00:02:32,520 --> 00:02:35,580 biHeight არის სიმაღლე იმიჯი pixels. 47 00:02:35,580 --> 00:02:39,200 და ა.შ. ეს ის შეიცავს structs 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 struct და ხედავს რომელიც ცვლადების ჩამოთვლილი. 51 00:02:49,670 --> 00:02:54,700 >> რათა განაახლოთ outfiles header ინფორმაცია, რომ თქვენ აპირებთ მინდა 52 00:02:54,700 --> 00:02:57,025 შეცვლის იმ ღირებულებებს სიმაღლე და სიგანე. 53 00:02:57,025 --> 00:03:00,570 მაგრამ შანსი, თქვენ ალბათ საჭიროა ზოგიერთი საქართველოს infile მიერ header ინფორმაცია 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 დაწერა არასწორი ღირებულებების header ამისთვის outfile. 57 00:03:12,490 --> 00:03:16,160 >> ახლა მოდით მისაღებად კითხულობს შევიდა scanline pixel-by-pixel. 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 იღებს მომცეთ struct , რომელშიც იქნება ბაიტი, რომ 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 ფუნქცია, ასე რომ ჩვენ აღებული მომცეთ struct 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 და მაშინ ვიმეორებ პროცესი იქნება, შეუძლია მარტივი განმეორებითი for loop. 75 00:04:19,200 --> 00:04:21,740 >> მაგრამ ჩვენ უნდა გვახსოვდეს, დაამატოთ padding შემოსული 76 00:04:21,740 --> 00:04:26,040 კონცეფცია padding არის ის, რომ, ასევე, თითოეული პიქსელის სამი ნაკბენები, მაგრამ 77 00:04:26,040 --> 00:04:28,940 ზომა თითოეული scanline აუცილებელია იყოს ჯერადი 4 ბაიტი. 78 00:04:28,940 --> 00:04:33,660 ასე რომ, თუ ნომერი pixels არ არის მრავალჯერადი 4, საჭიროა, რომ დაამატოთ ზოგიერთი 79 00:04:33,660 --> 00:04:36,630 padding, რომელიც მხოლოდ zeroes. 80 00:04:36,630 --> 00:04:42,130 ახლა, განსხვავებით ვინ გააკეთა ეს, და განსხვავებით ასლი, მაშინ infile იმიჯი და 81 00:04:42,130 --> 00:04:44,370 outfile ფაილი არ განსხვავდება აქვს სხვადასხვა padding რადგან ისინი 82 00:04:44,370 --> 00:04:46,360 სხვადასხვა widths. 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 მე დატოვონ ეს თქვენ, რათა იპოვოს ის, მაგრამ გითხრათ, რომ დაწერა padding, 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 ასე რომ, ახლა რომ ჩვენ resized ჰორიზონტალურად, და შემდეგ გამოიყენება padding, 90 00:05:08,670 --> 00:05:12,030 გახსოვდეთ, რომ თქვენ უნდა გადავიდეს თქვენი ფაილი პოზიცია მაჩვენებელი, რადგან თქვენ 91 00:05:12,030 --> 00:05:14,480 ვერ fread თარგმნეს padding. 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 ჩვენ არ შეგვიძლია უბრალოდ მონაკვეთი მას ჰორიზონტალურად, რადგან ყველა row საჭიროებების 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 ასე რომ, ერთი, ჩვენ შეგვიძლია გამოვიყენოთ ხელმეორე მეთოდით, რომ ჩვენ გვახსოვს ყველა pixels 99 00:05:39,010 --> 00:05:42,840 მოცემული row მასივი, და მაშინ წერენ, რომ წყობის 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, დამატებით padding, ჩვენ fseek 103 00:05:53,530 --> 00:05:57,250 დაბრუნება დასაწყისში ორიგინალური row, და შემდეგ გაიმეოროს ჰორიზონტალური 104 00:05:57,250 --> 00:05:58,710 resizing იქიდან. 105 00:05:58,710 --> 00:06:02,280 მიუხედავად მეთოდი, თუმცა, თქვენ მინდა ყველა pixel უნდა განმეორდეს 106 00:06:02,280 --> 00:06:06,370 N ჯერ, და ყოველ ზედიზედ უნდა იყოს განმეორებითი N ჯერ ისევე. 107 00:06:06,370 --> 00:06:09,160 >> რომ, თქვენ უნდა bitmap უფრო დიდი, ვიდრე ცხოვრებაში. 108 00:06:09,160 --> 00:06:11,760 ჩემი სახელი არის Zamyla, და ეს არის CS50. 109 00:06:11,760 --> 00:06:19,542