onilink_

Untitled

Jul 13th, 2023
969
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.99 KB | None | 0 0
  1. void downscale(ImageBuffer& im_src)
  2. {
  3.     ImageBuffer im_dst;
  4.     im_dst.wid = im_src.wid / 2;
  5.     im_dst.hei = im_src.hei / 2;
  6.     im_dst.buffer.resize(uint64_t(im_dst.wid) * im_dst.hei * 4);
  7.    
  8.     const unsigned W = im_src.wid * 4;
  9.    
  10.     #pragma omp parallel for
  11.     for(unsigned y=0; y<im_dst.hei; y++) {
  12.         for(unsigned x=0; x<im_dst.wid; x++) {
  13.             unsigned src_x = x * 2;
  14.             unsigned src_y = y * 2;
  15.             unsigned src_idx = (src_x + src_y * im_src.wid) * 4;
  16.             unsigned dst_idx = (x + y*im_dst.wid) * 4;
  17.            
  18.             for(unsigned n=0; n<4; ++n)
  19.             {
  20.                 im_dst.buffer[dst_idx+n] = (0u +
  21.                         uint8_t(im_src.buffer[src_idx+n]) +
  22.                         uint8_t(im_src.buffer[src_idx+n+4]) +
  23.                         uint8_t(im_src.buffer[src_idx+n+W]) +
  24.                         uint8_t(im_src.buffer[src_idx+n+W+4]))/4;
  25.             }
  26.         }
  27.     }
  28.    
  29.     std::swap(im_src, im_dst);
  30. }
Advertisement
Add Comment
Please, Sign In to add comment