1 00:00:00,000 --> 00:00:12,240 >> [მუსიკის დაკვრა] 2 00:00:12,240 --> 00:00:15,870 >> რობ Bowden: Hi, მე Rob, მოდით ცდილობენ ეს ზომა. 3 00:00:15,870 --> 00:00:21,100 ასე რომ, ჩვენ კიდევ ერთხელ აპირებს იწყება ძირითადად ასლი copy.c და 4 00:00:21,100 --> 00:00:22,860 რამდენიმე ცვლილებები. 5 00:00:22,860 --> 00:00:26,280 შენიშვნა დაუყოვნებლივ ვხედავთ ცვლილება, სადაც ნაცვლად შემოწმების თუ 6 00:00:26,280 --> 00:00:30,440 argc არ უდრის 3, ჩვენ გვინდა შევამოწმოთ თუ argc არ თანაბარი 4 წლიდან 7 00:00:30,440 --> 00:00:34,350 ახლა ჩვენ არა მხოლოდ აღების infile და outfile, მაგრამ ჩვენ ასევე აღების 8 00:00:34,350 --> 00:00:38,980 n, რომელიც არის თანხა, რომ ჩვენ სკალირების ორიგინალური იმიჯი მიერ. 9 00:00:38,980 --> 00:00:44,340 მას შემდეგ, რაც ჩვენ დარწმუნებული, რომ ჩვენ შეგვიძლია მხოლოდ კონვერტირება n მთელი რიცხვი გამოყენებით atoi. 10 00:00:44,340 --> 00:00:48,760 >> ასე რომ, ახლა ჩვენ ვაპირებთ, რომ შევქმნათ მაგალითი, მხოლოდ დარეკვა argv 2 infile და 11 00:00:48,760 --> 00:00:54,240 argv 3 outfile, რადგან argv 2 და argv 3 არ არის ძალიან გამოსადეგი სახელები. 12 00:00:54,240 --> 00:00:58,510 ახლა ჩვენ გვინდა შეამოწმეთ დარწმუნდით N არის ფარგლებში ჩვენ ველით, ისე 13 00:00:58,510 --> 00:01:02,910 სპეც მიუთითებს, რომ თუ ის ნაკლებია ან ნულის ტოლია, ან აღემატება 100, 14 00:01:02,910 --> 00:01:08,580 მაშინ რომ არასწორი ზომა ფაქტორი, და ჩვენ უნდა გააფრთხილოს შესახებ, რომ. 15 00:01:08,580 --> 00:01:13,090 >> მას შემდეგ, რაც ჩვენ მიღმა ყველა რომ, ჩვენ შეგვიძლია საბოლოოდ გახსნა ჩვენი infile, და ჩვენ გვჭირდება 16 00:01:13,090 --> 00:01:16,270 შეცდომა შემოწმება, რათა დავრწმუნდეთ, რომ გახსნა არ ჩავარდება რატომღაც. 17 00:01:16,270 --> 00:01:19,860 ჩვენ ასევე უნდა გახსნა ჩვენი outfile და ისევ შეცდომა შემოწმება დარწმუნდით, რომ 18 00:01:19,860 --> 00:01:21,250 არ ვერ რატომღაც. 19 00:01:21,250 --> 00:01:26,270 მაგრამ დარწმუნებული უნდა იყოს, თუ გახსნის outfile ვერ, რომ ჩვენ უნდა დახუროს 20 00:01:26,270 --> 00:01:29,040 infile, რომელიც უკვე გაიხსნა. 21 00:01:29,040 --> 00:01:33,690 >> ასე რომ, თუ გავითვალისწინებთ, რომ არ ვერ, მაშინ we're - ისევე, როგორც copy.c-- 22 00:01:33,690 --> 00:01:36,140 აპირებს წაიკითხონ header საწყისი infile. 23 00:01:36,140 --> 00:01:40,130 ჩვენ ვაპირებთ, რომ დავრწმუნდეთ, რომ ეს სწორი bitmap, მაგრამ ახლა ჩვენ ვაპირებთ, რომ გავაკეთოთ ზოგიერთი 24 00:01:40,130 --> 00:01:41,620 რამ ცოტა განსხვავებულად. 25 00:01:41,620 --> 00:01:44,870 ასე რომ, პირველი, ჩვენ ვაპირებთ, რომ გსურთ მახსოვს ორიგინალური სიგანე და სიმაღლე 26 00:01:44,870 --> 00:01:48,290 საქართველოს infile, რადგან ჩვენ ვაპირებთ იცვლება იგი outfile. 27 00:01:48,290 --> 00:01:53,890 ასე რომ, ახლა მახსოვს, რომ უცნაური მიზეზები bi.biheight, არის უარყოფითი, და 28 00:01:53,890 --> 00:01:58,670 ასე რომ, ნამდვილი სიმაღლე, დადებითი, ჩვენ სურს მიიღოს აბსოლუტური ღირებულება. 29 00:01:58,670 --> 00:02:02,580 >> ახლა, padding იქნება იგივე გაანგარიშება როგორც ეს იყო copy.c, 30 00:02:02,580 --> 00:02:06,060 გამოყენებით ძველი სიგანე, და ახლა ჩვენ რეალურად შეიცვლება 31 00:02:06,060 --> 00:02:07,320 რა არის ჩვენი header. 32 00:02:07,320 --> 00:02:11,200 ამიტომ, ჩვენ ვაპირებთ გავამრავლოთ ჩვენი სიგანე n, რადგან ჩვენ სკალირების სიგანე 33 00:02:11,200 --> 00:02:15,100 n, გავამრავლოთ სიმაღლე n, რადგან ჩვენ სკალირების by n, და ახლა ჩვენ გვაქვს 34 00:02:15,100 --> 00:02:19,250 გაანგარიშება ახალი padding საფუძველზე ახალი სიგანე. 35 00:02:19,250 --> 00:02:21,840 >> ასე რომ, ახლა ჩვენ უნდა შეცვალოს ზოგიერთი სხვა სფეროებში ჩვენი header. 36 00:02:21,840 --> 00:02:26,890 Bi.biSizeImage უნდა იყოს ზომა ყველა bytes in pixels 37 00:02:26,890 --> 00:02:28,520 და padding გამოსახულება. 38 00:02:28,520 --> 00:02:34,190 და ასე ზომა ერთ გრაფაში ჩვენი გამოსახულების ზომა RGB triple, ზომა 39 00:02:34,190 --> 00:02:39,430 ერთი pixel, ჯერ რაოდენობა pixels in a row, პლუს padding at 40 00:02:39,430 --> 00:02:40,910 ბოლოს row. 41 00:02:40,910 --> 00:02:45,200 და მაშინ ჩვენ ვაპირებთ გავამრავლოთ რომ აბსოლუტური ღირებულება ჩვენი სიმაღლე მისაღებად 42 00:02:45,200 --> 00:02:48,350 საერთო რაოდენობის bytes იმიჯი მონაცემები. 43 00:02:48,350 --> 00:02:53,050 bf.bfSize მხოლოდ საერთო რაოდენობა ბაიტების ჩვენი იმიჯი მონაცემები, ასე რომ, 44 00:02:53,050 --> 00:02:56,530 bi.biSizeImage, პლუს ზომა ჩვენი headers. 45 00:02:56,530 --> 00:02:59,850 ასე რომ, დასძინა ზომა Bitmap ფაილი header, და ზომის bitmap ინფორმაცია 46 00:02:59,850 --> 00:03:00,800 header, OK. 47 00:03:00,800 --> 00:03:03,170 ასე რომ ყველა ჩვენ გვჭირდება იცვლება ჩვენი headers. 48 00:03:03,170 --> 00:03:07,020 ახლა ჩვენ წერენ Bitmap ფაილი header ჩვენს outfile და ჩვენი bitmap ინფორმაცია 49 00:03:07,020 --> 00:03:09,880 header ჩვენს outfile და ახლა ჩვენ მზად ვართ დავიწყოთ აპირებს 50 00:03:09,880 --> 00:03:11,990 მეტი ფაქტობრივი pixels. 51 00:03:11,990 --> 00:03:15,720 >> ასე რომ ჩვენ გვინდა iterate მეტი infile მიერ სკანირების ხაზები. 52 00:03:15,720 --> 00:03:17,730 ასე რომ ჩვენ გვინდა iterate მეტი oldheight. 53 00:03:17,730 --> 00:03:20,830 ამიტომ, საჭიროა გვახსოვდეს ორიგინალური სიმაღლე, სანამ ჩვენ მას ვცვლით 54 00:03:20,830 --> 00:03:23,040 და მასშტაბური მიერ n. 55 00:03:23,040 --> 00:03:27,810 ახლა ჩვენ ვაპირებთ წაკითხვის ერთი გრაფაში infile შევიდა 56 00:03:27,810 --> 00:03:30,630 ბუფერის ზომა oldwidth. 57 00:03:30,630 --> 00:03:36,190 ასე რომ აქ, ჩვენ freading ზომა RGB სამჯერ, ერთი pixel, და ძველი სიგანე 58 00:03:36,190 --> 00:03:39,760 მათ infile ჩვენს ბუფერული. 59 00:03:39,760 --> 00:03:43,480 და რომ იქნება მთელი ზედიზედ ამ მასივი. 60 00:03:43,480 --> 00:03:50,390 ახლა, ჩვენ გვინდა iterate n ჯერ ბეჭდვა ამ row ჩვენს outfile n ჯერ. 61 00:03:50,390 --> 00:03:52,510 და ისე, რომ ის, რაც ამ loop აკეთებს. 62 00:03:52,510 --> 00:03:57,910 ეს შიდა მარყუჟი iterating მეტი ზედიზედ თავისთავად, მეტი მასივი, ბეჭდვა 63 00:03:57,910 --> 00:04:00,710 თითოეული პიქსელის მასივი N ჯერ. 64 00:04:00,710 --> 00:04:04,510 ასე რომ zeroth ელემენტი იბეჭდება n ჯერ, პირველ ელემენტს მიმდინარეობს 65 00:04:04,510 --> 00:04:05,660 ნაბეჭდი n ჯერ. 66 00:04:05,660 --> 00:04:10,820 და რომ ერთგვარი როგორ ჩვენ ვაპირებთ ჰორიზონტალურად მასშტაბებს outfile და 67 00:04:10,820 --> 00:04:13,390 ამ მარყუჟის, რადგან ჩვენ looping n ჯერ, თუ როგორ ვაპირებთ 68 00:04:13,390 --> 00:04:15,580 ვერტიკალურად მასშტაბით. 69 00:04:15,580 --> 00:04:19,850 >> ქვემოთ აქ, ჩვენ ვხედავთ, რომ ჩვენ უნდა დაამატოთ padding დასასრულს თითოეული მწკრივი. 70 00:04:19,850 --> 00:04:25,050 ამიტომ ამ არის შიგნით მარყუჟის რომ დაბეჭდვისას n რიგები მხოლოდ 71 00:04:25,050 --> 00:04:28,400 ამ ერთი row საწყისი infile. 72 00:04:28,400 --> 00:04:32,150 შემდეგ ქვევით აქ, მე ვაპირებ გამოტოვოთ მეტი padding წელს infile, რადგან ერთხელ 73 00:04:32,150 --> 00:04:34,560 ჩვენ გავაკეთეთ ერთ გრაფაში infile, ჩვენ არ აინტერესებს 74 00:04:34,560 --> 00:04:35,290 რა padding იყო. 75 00:04:35,290 --> 00:04:37,110 ჩვენ უბრალოდ გვინდა მეორე რიგის. 76 00:04:37,110 --> 00:04:40,870 და მაშინ ჩვენ loop უკან და ყველაფერი ეს კიდევ ერთხელ მეორე row. 77 00:04:40,870 --> 00:04:44,406 >> და ბოლოს, ერთხელ ჩვენ გაკეთდეს ყველა რომ, ჩვენ შეგიძლიათ დახუროთ infile ახლოს, 78 00:04:44,406 --> 00:04:47,430 outfile და დაბრუნება 0, რადგან ჩვენ გავაკეთეთ. 79 00:04:47,430 --> 00:04:50,330 >> ჩემი სახელი არის რობ, და ეს იყო ზომა. 80 00:04:50,330 --> 00:04:54,934 >> [მუსიკის დაკვრა]