1 00:00:00,000 --> 00:00:00,996 2 00:00:00,996 --> 00:00:12,470 >> [Музыка гуляе] 3 00:00:12,470 --> 00:00:13,210 >> ROB BOWDEN: Прывітанне. 4 00:00:13,210 --> 00:00:16,870 Я Роб і давайце памер да гэтай праблемы. 5 00:00:16,870 --> 00:00:20,990 Так што мы збіраемся пачаць з copy.c як шаблон, але мы збіраемся быць 6 00:00:20,990 --> 00:00:23,340 робіць даволі шмат змен. 7 00:00:23,340 --> 00:00:27,570 >> Цяпер мы бачым, што мы адразу ж робіць не змяніць, дзе мы больш не правяраць 8 00:00:27,570 --> 00:00:31,560 для нашага RXC ня роўная 3, але цяпер мы правяраем RC не роўная 4. 9 00:00:31,560 --> 00:00:34,670 Паколькі мы таксама хочам ўключыць у дадатак да ў файл і з файлаў 10 00:00:34,670 --> 00:00:39,550 аргументы, е, які будзе гэта каэфіцыент, на які мы маштабавання. 11 00:00:39,550 --> 00:00:45,430 >> Таму, як толькі мы ў гэтым упэўнены, мы хочам выкарыстоўваць з сканавання е пераўтварыць радок 12 00:00:45,430 --> 00:00:49,030 argv1 да паплаўка. 13 00:00:49,030 --> 00:00:51,330 І мы збіраемся захоўваць , Што ў фактар. 14 00:00:51,330 --> 00:00:55,180 Гэты дадатковы сімвал пераканаўшыся што мы не на самай справе ўводу 15 00:00:55,180 --> 00:00:59,200 нешта накшталт 1.4 ABC у камандным радку. 16 00:00:59,200 --> 00:01:02,960 >> Цяпер мы збіраемся стварыць некалькі псеўданімаў з RV2 і RV3 ня 17 00:01:02,960 --> 00:01:04,310 вельмі карысныя імёны. 18 00:01:04,310 --> 00:01:07,660 Мы, наадварот, буду называць іх у файл і з файла. 19 00:01:07,660 --> 00:01:11,580 Цяпер мы збіраемся, каб пераканацца, што наша фактарам было на самай справе дзейнічае. 20 00:01:11,580 --> 00:01:16,330 Такім чынам, калі каэфіцыент менш або роўная нуля ці больш за 100, то, згодна з 21 00:01:16,330 --> 00:01:19,660 спецыфікацыя, мы павінны адкінуць гэты фактар. 22 00:01:19,660 --> 00:01:23,890 >> Калі мы ўпэўненыя, што гэта добра, зараз мы можам адкрыць файл н, і мы павінны зрабіць 23 00:01:23,890 --> 00:01:25,950 упэўнены, што гэта быў паспяхова адкрыты. 24 00:01:25,950 --> 00:01:28,630 Калі гэтага не адбылося, што вернецца пустым. 25 00:01:28,630 --> 00:01:30,390 Мы збіраемся адкрыць файл са становішча. 26 00:01:30,390 --> 00:01:33,420 І зноў жа, мы хочам праверыць, каб упэўнены, што гэта паспяхова адкрыты. 27 00:01:33,420 --> 00:01:37,270 І калі гэта не паспяхова адкрыць, то мы таксама павінны быць упэўненыя, каб закрыць 28 00:01:37,270 --> 00:01:40,870 файл н які першапачаткова паспяхова адкрыў, інакш у нас ёсць 29 00:01:40,870 --> 00:01:42,600 ўцечка памяці. 30 00:01:42,600 --> 00:01:46,350 >> Так што цяпер мы збіраемся чытаць у бітавай загаловак файла і растравыя інфармацыі 31 00:01:46,350 --> 00:01:48,890 загаловак з файла н. 32 00:01:48,890 --> 00:01:52,360 Мы збіраемся, каб пераканацца, што н файл быў сапраўдны растравы. 33 00:01:52,360 --> 00:01:52,640 ОК. 34 00:01:52,640 --> 00:01:55,100 >> Так што цяпер мы збіраемся пачаць ўнясення некаторых змен. 35 00:01:55,100 --> 00:01:58,840 Так, таму што мы збіраемся быць змены рэчы, мы спачатку хочам памятаць 36 00:01:58,840 --> 00:02:01,510 стары шырыня файле н. 37 00:02:01,510 --> 00:02:05,160 Мы хочам узгадаць старую водступ файл н, выкарыстоўваючы той жа разлік 38 00:02:05,160 --> 00:02:06,990 ад copy.c. 39 00:02:06,990 --> 00:02:09,840 >> І зараз мы збіраемся змяніць растравы інфармацыі загалоўка. 40 00:02:09,840 --> 00:02:13,630 І таму мы множання і шырыню а вышыня фактарам, паколькі 41 00:02:13,630 --> 00:02:15,750 гэта тое, што мы маштабавання па. 42 00:02:15,750 --> 00:02:18,420 Мы збіраемся, каб вызначыць, Новая абіўка файла па 43 00:02:18,420 --> 00:02:21,140 з выкарыстаннем новай шырыні. 44 00:02:21,140 --> 00:02:27,330 І мы збіраемся, каб вызначыць новы памер малюнка, выкарыстоўваючы шэраг 45 00:02:27,330 --> 00:02:31,610 байт у адзін шэраг, які збіраецца -Лік пікселяў ў дадзенай радку 46 00:02:31,610 --> 00:02:35,960 раз памер піксэлях плюс Колькасць байтаў запаўнення ў канцы 47 00:02:35,960 --> 00:02:40,310 з гэтага радка, і памнажаючы ўсё, што па колькасці радкоў, якія мы маем. 48 00:02:40,310 --> 00:02:43,800 Так вось колькасць байт мы маем у нашых дадзеных выявы. 49 00:02:43,800 --> 00:02:48,190 >> Bf.Bfsize цяпер будзе лік байтаў ў нашай малюнка бэта плюс 50 00:02:48,190 --> 00:02:49,350 Памер нашых загалоўкаў. 51 00:02:49,350 --> 00:02:53,910 Так плюс памер загалоўка растравага файла і памер растравага інфармацыя загалоўка. 52 00:02:53,910 --> 00:02:54,510 ОК. 53 00:02:54,510 --> 00:02:56,440 Дык вось яно што для нашых загалоўкаў. 54 00:02:56,440 --> 00:02:59,030 Мы можам запісаць файл галаву і Інфармацыя загалоўка ў наш выхад 55 00:02:59,030 --> 00:03:01,590 файл, і мы добра. 56 00:03:01,590 --> 00:03:03,800 >> Цяпер прыйшоў час, каб пачаць на самай справе напісанне піксель 57 00:03:03,800 --> 00:03:05,120 дадзеныя ў файл OUT. 58 00:03:05,120 --> 00:03:10,460 Мы збіраемся аб'явіць буфер памерам стары шырыня гама троек, і мы 59 00:03:10,460 --> 00:03:13,790 збіраецца абвясціць зменную радок анямелі, што мы збіраемся 60 00:03:13,790 --> 00:03:15,640 першапачаткова усталёўваецца роўнай адмоўнай 1. 61 00:03:15,640 --> 00:03:19,090 Мы ўбачым, што мы збіраемся выкарыстаць што для таго, каб адсочваць, што 62 00:03:19,090 --> 00:03:22,640 радок у цяперашні час мы загрузілі у гэты буфер. 63 00:03:22,640 --> 00:03:23,290 ОК. 64 00:03:23,290 --> 00:03:28,750 >> Так што цяпер, у адрозненне ад стандартнай версіі, замест ітэрацыі ў пачатковай 65 00:03:28,750 --> 00:03:32,900 файл, мы збіраемся для перабору кожнага радок ў файлавыя і высветліць, 66 00:03:32,900 --> 00:03:38,130 якая радок у файле ў мы хочам месца ў гэтым шэрагу ў файле па-за. 67 00:03:38,130 --> 00:03:44,930 Так перабірае усе радкі ў выхад файл з дапамогай новага вышыню, мы спачатку 68 00:03:44,930 --> 00:03:48,890 будзе вызначаць радок у старым падаць мы збіраемся выкарыстаць, якія мы 69 00:03:48,890 --> 00:03:53,560 збіраюся зрабіць, прымаючы гэты ток падзеленае на фактар ​​шэраг. 70 00:03:53,560 --> 00:03:58,000 Так што адбываецца, каб даць нам радок у старым файле, які мы хочам. 71 00:03:58,000 --> 00:04:03,310 >> Так што цяпер, калі радок анямелі не можа ісці ў стары у, мы збіраемся павінны прачытаць радок 72 00:04:03,310 --> 00:04:05,940 што мы хочам у нашай CUR буфера радка. 73 00:04:05,940 --> 00:04:07,700 Так як мы збіраемся гэта зрабіць? 74 00:04:07,700 --> 00:04:11,650 Па-першае, мы збіраемся высветліць, пазіцыя, якая пачынаецца гэты радок у 75 00:04:11,650 --> 00:04:13,100 зыходны файл. 76 00:04:13,100 --> 00:04:18,630 Так што пазіцыя будзе міма ўсіх нашых загалоўкаў і 77 00:04:18,630 --> 00:04:21,589 Зараз апошнія старыя ў радкоў. 78 00:04:21,589 --> 00:04:23,880 >> І так, колькі байт знаходзяцца ў адной радку? 79 00:04:23,880 --> 00:04:28,740 Зноў жа, памер RGB патройныя раз стары шырыня плюс стары абіўка, так вось 80 00:04:28,740 --> 00:04:30,640 Лік байтаў ў адным радку. 81 00:04:30,640 --> 00:04:33,680 І мы хочам, каб прапусціць міма старых Y радкоў. 82 00:04:33,680 --> 00:04:37,580 Такім чынам, мы збіраемся е шукаць і мы выкарыстоўваючы шукаць мноства пачаць з 83 00:04:37,580 --> 00:04:39,100 пачатак файла. 84 00:04:39,100 --> 00:04:42,740 Мы збіраемся е шукаць на гэтую пасаду ў файле, ставячы сябе на 85 00:04:42,740 --> 00:04:46,500 пачатку шэрагу мы хочам чытаць у нашай буфера. 86 00:04:46,500 --> 00:04:48,510 >> Мы збіраемся ўсталяваць радок здранцвенне роўная старой у. 87 00:04:48,510 --> 00:04:53,080 Так што цяпер, калі мы пятля назад, і мы хочам выкарыстоўваць гэтую ж радок у нашым па-за файла, 88 00:04:53,080 --> 00:04:55,970 то мы не збіраемся чытаць яго зноў без неабходнасці. 89 00:04:55,970 --> 00:04:59,310 Так на самай справе, шэраг здранцвенне з'яўляецца проста аптымізацыя. 90 00:04:59,310 --> 00:05:05,500 >> Нарэшце, мы збіраемся, каб прачытаць у бягучая радок стары шырыня гама троек 91 00:05:05,500 --> 00:05:08,040 што мы хочам ад зыходнага файла. 92 00:05:08,040 --> 00:05:12,270 Так што цяпер з актуальн. Радок утрымлівае пікселі ад зыходны файл, які мы хочам 93 00:05:12,270 --> 00:05:14,200 напісаць у файл з. 94 00:05:14,200 --> 00:05:18,960 Так што цяпер, гэтак жа, як вышэй, замест ітэрацыі старога файла, мы павінны 95 00:05:18,960 --> 00:05:22,560 гэта перабраць новых файлаў радкоў. 96 00:05:22,560 --> 00:05:27,450 Ну вось, замест таго, каб ітэрацыі па ўсіх са старых пікселяў, што ў CUR запар, 97 00:05:27,450 --> 00:05:31,210 мы хочам перабраць усе пікселяў ў нашым новым файле у гэты 98 00:05:31,210 --> 00:05:32,480 канкрэтная радок. 99 00:05:32,480 --> 00:05:34,140 >> Чаму мы хочам, каб гэта зрабіць? 100 00:05:34,140 --> 00:05:38,960 Таму што мы бачым тут, што мы не на самай справе абавязкова, выкарыстоўваючы ўсе 101 00:05:38,960 --> 00:05:41,020 пікселяў ў зыходным файле. 102 00:05:41,020 --> 00:05:46,630 Таму што, калі мы скарачаецца, мы маглі б на самай справе хочаце, каб прапусціць пікселяў. 103 00:05:46,630 --> 00:05:48,090 І мы бачым, што гэта - 104 00:05:48,090 --> 00:05:49,690 х падзеленае на колькасць фактары - 105 00:05:49,690 --> 00:05:55,620 блізка адлюстроўвае тут, дзе мы кажам, у дзеліцца на каэфіцыент, каб высветліць, што 106 00:05:55,620 --> 00:06:02,480 стары у-я радок адпавядае Y-га радка ў гэтым новым файле. 107 00:06:02,480 --> 00:06:05,880 >> Цяпер мы збіраемся напісаць усё гэтыя пікселі з старой радкі 108 00:06:05,880 --> 00:06:07,440 у нашай новай радка. 109 00:06:07,440 --> 00:06:10,890 Як толькі мы гэта зрабілі, мы павінны проста паставіць пракладку ў канцы нашай радкі 110 00:06:10,890 --> 00:06:15,540 і мы будзем пятлю назад і працягвацца на працягу усе радкі ў нашым новым файле. 111 00:06:15,540 --> 00:06:19,390 У рэшце рэшт, мы павінны закрыць наш стары файл, зачыніць наш новы файл, і вяртанне 112 00:06:19,390 --> 00:06:21,540 нуля, таму што ўсё прайшло добра. 113 00:06:21,540 --> 00:06:24,220 >> Мяне клічуць Боб, і гэта было Перапынак. 114 00:06:24,220 --> 00:06:29,184 >> [Музыка гуляе]