Այս խնդում մենք կգրենք ծրագիր, որը կձևափոխի մուտքային նկարը, կիրառելով նրա վրա մի քանի հայտնի ֆիլտրներ`
Grayscale
- նկարը դարձնում է սև և սպիտակ
Sepia
- նկարին տալիս է «հնության» էֆեկտ
Reflection
- նկարի հայելային արտապատկերում
Blur
- նկարին տալիս է "լղոզվածության” էֆեկտ
Grayscale
Նորից վերհիշենք, որ եթե պիկսելի բոլոր բիթերում գրված է զրո՝
0x000000,
դա նշանակում է, որ այն ունի սև գույն (պիկսելը ոչ մի գույն չի պարունակում)։ Եթե բոլոր բիթերում գրված է 1 0xffffff
՝ պիկսելը ունի սպիտակ գույն (պիկսելը պարունակում է բոլոր գույները)։ Եթե փոփոխենք պիկսելի կապույտ, կանաչ, կարմիր գույների արժեքները այնպես, որ նրանք միշտ մնան իրար հավասար, ապա կստանանք մոխրագույնի տարբեր երանգներ։ Ընդ որոմ, ինչքան մեծ լինեն արժեքները (սպիտակ գույնի մոտ), այնքան ավելի բաց երանգով մոխրագույն կստացվի։ Եվ հակառակը, ինչքան ավելի փոքր լինեն արժեքները (սև գույնի մոտ), այնքան ավելի մուգ երանգով մոխրագույն կստանանք։ Անցեք հղումով և փորձեք կարմիր, կանաչ, կապույտ գույներին տալ իրար հավասար տարբեր արժեքներ, որպեսզի վիզուալ տեսնեք մոխրագույնի երանգները։
Այսպիսով, որպեսզի գունավոր նկարը ձևափոխենք սև-սպիտակ նկարի, մեզ անհրաժեշտ է ամեն պիկսելի կարմիր, կապույտ և կանաչ գույների արժեքները հավասարեցնել իրար։ Ընդ որում, եթե պիկսելում կարմիր, կապույտ, կանաչ գույների սկզբնական արժեքները մեծ են, ապա պետք է, որ նոր արժեքը նույնպես լինի «մեծ», և հակառակը։
Պիկսելի նոր արժեքը ստանալու համար, հարկավոր է նրա յուրաքանչյուր գույնին (կապույտ, կանաչ, կարմիր) վերագրել բոլոր 3 գույների միջին արժեքը։ Եթե կիրառենք այս ալգորիթմը պատկերի բոլոր պիկսելների համար, կստանանք սկզբնական նկարի սև-սպիտակ տարբերակը։
Քանի՞ մոխրագույն երանգ կարող ենք ստանալ, եթե պիկսելը պահելու համար օգտագործվում է 24 բիթ հիշողություն։
Sepia
Sepia
ֆիլտրը տալիս է նկարին «հնաոճության» էֆեկտ։ 

Գոյություն ունեն
Sepia
էֆեկտին հասնելու տարբեր ալգորիթմներ։ Այս խնդրում մենք կօգտվենք հետևյալ ալգորիթմից՝ նկարի յուրաքանչյուր պիկսելի կապույտ, կարմիր, կանաչ գույների արժեքները հարկավոր է փոխարինել հետևյալ կերպ՝sepiaRed = .393 * originalRed + .769 * originalGreen + .189 * originalBlue sepiaGreen = .349 * originalRed + .686 * originalGreen + .168 * originalBlue sepiaBlue = .272 * originalRed + .534 * originalGreen + .131 * originalBlue
Այս գործակիցները ընտված են փորձարկումների հիման վրա։ Դուք կարող եք փոփոխել դրանք և Sepia ֆիլտրի այլ վարիացիաներ։
Նոր արժեքը հաշվելուց ստացվում է սահող կետով թիվ, որը անհրաժեշտ է կլորացնել դեպի մոտակա ամբողջ թիվը։
Հիշե՛ք, որ պիկսելի յուրաքանչյուր գույնը զբաղեցնում է
8
բիթ հիշողություն։ Հնարավոր է, որ ստացված նոր գույնի արժեքը մեծ լինի 255
-ից (չտեղավորվի 8
բիթի մեջ)։ Հարկավոր է ամեն գույնի նոր արժեքը սահմանափակել 255
-ով։ Reflection
Reflection
ֆիլտրը կիրառելուց հետո ստացվում է այնպիսի նկար, որը կստանանք եթե սկզբնական նկարը դնեք հայելու առջև։ 

Այս էֆեկտը ստանալու համար, հարկավոր է նկարի ձախ կողմի յուրաքանչյուր պիկսել փոխարինել դրա աջ կողմի պիկսելներով։
Blur
Blur
ֆիլտրը տալիս է նկարին «լղոզվածության էֆեկտ»։

Գոյություն ունեն տարբեր ալգորիթմներ
Blur
էֆեկտը ստանալու համար։ Այս խնդրում, մենք կօգտագործենք «Box Blur
» ալգորիթմը։ Պիկսելի յուրաքանչյուր գույնի (bgr
) նոր արժեքը հավասար է նրա շրջակա պիկսելների համապատասխան գույների միջին արժեքին։ Պիկսելի նոր արժեքը հաշվելիս օգտագործվում է նրա անմիջական հարևան պիկսելների արժեքները (մեկ տող և մեկ սյուն հեռավորության վրա գտնվող)։ Այս օրինակում, 6 -րդ «համարի» պիկսելի կարմիր գույնի նոր արժեքը հավասար կլինի 1, 2, 3, 5, 6, 7, 9, 10, 11 համարի պիկսելների կարմիր գույների արժեքների միջին թվաբանականին (նկատեք, որ 6 -րդ համարի պիկսլը նույնպես մասնակցում է հաշվարկում)։

Նմանապես, 11-րդ «համարի» պիկսելի յուրաքանչյուր գույնի արժեքը հաշվելիս հարկավոր է միջինացնել
6, 7, 8, 10, 11, 12, 14, 15, 16
համարի պիկսելների համապատասխան գույների արժեքները։ 
Եթե պիկսելը գտնվում է «եզրի» վրա, հաշվարկին մասնակցում են միայն գոյություն ունեցող հարևանները։ Օրինակ՝
15
համարի պիկսելի արժեքը հաշվելու համար հարկավոր է օգտագործել 10, 11, 12, 14, 15, 16 համարի պիկսելները։
Ձեր խնդիրը փոքր-ինչ թեթևացնելու համար մենք արդեն իսկ գրել ենք ծրագրի մի հատվածը։ Այն կարող եք գտնել՝ սեղմելով “
projects
” կոճակի վրա։ 
Ինչպես նաև կարող եք ներբեռնել ծրագրի կոդը։
Ձեզ մնում է միայն իրականացնել համապատասխալ ալգորիթմները
filter.cpp
ֆայլում։Տվյալ պահին տեխնիկական պատճառներով այս խնդրի ավոտմատ թեստավորումը անհասանելի է։ Ծրագիրը լոկալ թեստավորելու համար կարող եք օգտվել հետևյալ bmp ֆայլերից։