CImg рд▓рд╛рдЗрдмреНрд░реЗрд░реА, C ++ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕рд░рд▓ рд╕реНрдХреНрд░реАрдирд╕реЗрд╡рд░

рдЖрдкрдХрд╛ рджрд┐рди рд╢реБрдн рд╣реЛ!
рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдореИрдВрдиреЗ рдПрдХ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ CImg рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдореБрдЦреНрдп рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ рдФрд░ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ред рдореБрдЭреЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдкреЛрд╕реНрдЯ рдПрдХ рдирд┐рдордВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдЗрд░рд╛рджрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдореИрдВрдиреЗ рдЗрд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереА рдФрд░ рд╕реНрдХреЛрд░ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ CImg рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХ рд╕реНрдХреНрд░реАрдирд╕реЗрд╡рд░ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЧрдпрд╛ рд╣реИ - рдХреИрдЯ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛

рддреБрд░рдВрдд рдЖрд░рдХреНрд╖рдг рдХрд░реЗрдВ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреВрд░реНрдг рд╕реНрдХреНрд░реАрди рд╕реЗрд╡рд░ рдХреЗ "рд╢реАрд░реНрд╖рдХ" рд╣реЛрдиреЗ рдХрд╛ рдирд╛рдЯрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓рдХреНрд╖реНрдп рдкреВрд░реНрд╡реЛрдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдерд╛ред

рдХреЛрдб

//  CImg #include "CImg.h" //   #define PI 3.14 //     std  cimg_library      using namespace cimg_library; using namespace std; //    int main (int argc, char **argv){ //  ,     //  - , ,   ,     //      CImg<float> logo, logo_layer_1 = CImg<>(800,600,1,1,0); //     //      "Welcome to CImg simple screensaver" logo_layer_1.draw_text(120,5,"Welcome to", CImg<>::vector(255).data(),CImg<>::vector(0).data(),1,128); logo_layer_1.draw_text(300,140,"CImg", CImg<>::vector(255).data(),CImg<>::vector(0).data(),1,128); logo_layer_1.draw_text(250,285, "simple", CImg<>::vector(255).data(),CImg<>::vector(0).data(),1,128); logo_layer_1.draw_text(120,425,"screensaver!", CImg<>::vector(255).data(),CImg<>::vector(0).data(),1,128); //     logo_layer_1.blur(6); //   logo_layer_1.normalize(0,255); //     CImg<float> logo_layer_2 = CImg<>(logo_layer_1.width(),logo_layer_1.height(),1,1,0); //      logo_layer_2.noise(80,1); //       2 logo_layer_2.deriche(2,0,'y',false); //      10 logo_layer_2.deriche(10,0,'x',false); //         logo logo = logo_layer_1 + logo_layer_2 + logo_layer_1; //      //  ,    ,     get_gradient(), //    "Compute the list of images, corresponding to the XY-gradients of an image" // -  "  ,  XY- " //    CimgList //    ,          CImgList<float> grad = logo.get_gradient(); //      normalize   (-140,140) cimglist_apply(grad,normalize)(-140,140); //    logo logo.normalize(0,255); //  ,   ,     "", //  ,       logo CImg<float> light = CImg<>(300 + 2*logo.width(),300 + 2*logo.height()); //       light.draw_gaussian(0.5f*light.width(),0.5f*light.height(),80,CImg<>::vector(255).data()); //    CImg<unsigned char> img(logo.width(),logo.height(),1,3,0); //  ,      CImgDisplay disp(img," ",true); //     disp.toggle_fullscreen(false); float t = 0; //  ,     'ESC'  'Q' while (!disp.is_closed() && !disp.is_keyQ() && !disp.is_keyESC()) { int pos_x, pos_y, gx, gy; float val; //      pos_x = (int)(img.width()/2 + img.width()*cos(1*t)/2); pos_y = (int)(img.height()/2 + img.height()*sin(3*t)/2); // cimg_forXY -   ,     //  - http://cimg.sourceforge.net/reference/group__cimg__loops.html cimg_forXY(img,x,y) { //   ,         gx = (int)grad[0](x,y); gy = (int)grad[1](x,y); val = 20 + (gx + gy)/2 + light(light.width()/2 + pos_x - x + gx,light.height()/2 + pos_y - y + gy); img(x,y,0) = img(x,y,1) = img(x,y,2) = (unsigned char)(val>255?255:val<0?0:val); } t = t >= 2*PI ? 0 : t+0.02f; //     disp.display(img.draw_image(0,0,0,1,logo,0.1f)); } return 0; } 


рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдирд┐рд╖реНрдХрд░реНрд╖ рдмрд╣реБрдд рд╣реА рдЖрд░рд╛рдорджрд╛рдпрдХ рдирд╣реАрдВ рд╣реИрдВред

Minuses рдХреА:


рдкреЗрд╢реЗрд╡рд░реЛрдВ рд╕реЗ:

рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдирд┐рд╖реНрдХрд░реНрд╖

CImg рдХреЗ рдЕрдкрдиреЗ рдЕрдзреНрдпрдпрди рдХреЗ рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдореИрдВ рдЦреБрдж рдХреЛ рдпрд╣ рдиреЛрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ CImg рдЧрддрд┐рд╢реАрд▓ рджреГрд╢реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рднреА, рдЬрдмрдХрд┐ рдЕрдзреНрдпрдпрди рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ, рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдЖрдкрдХреЗ рд╕рд╛рде рд╕реНрдереИрддрд┐рдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг "рдЪрдмрд╛рдиреЗ" рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред
рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!


PS рдХреЗрд╡рд▓ Linux рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛

Source: https://habr.com/ru/post/In141011/


All Articles