Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void downscale(ImageBuffer& im_src)
- {
- ImageBuffer im_dst;
- im_dst.wid = im_src.wid / 2;
- im_dst.hei = im_src.hei / 2;
- im_dst.buffer.resize(uint64_t(im_dst.wid) * im_dst.hei * 4);
- const unsigned W = im_src.wid * 4;
- #pragma omp parallel for
- for(unsigned y=0; y<im_dst.hei; y++) {
- for(unsigned x=0; x<im_dst.wid; x++) {
- unsigned src_x = x * 2;
- unsigned src_y = y * 2;
- unsigned src_idx = (src_x + src_y * im_src.wid) * 4;
- unsigned dst_idx = (x + y*im_dst.wid) * 4;
- for(unsigned n=0; n<4; ++n)
- {
- im_dst.buffer[dst_idx+n] = (0u +
- uint8_t(im_src.buffer[src_idx+n]) +
- uint8_t(im_src.buffer[src_idx+n+4]) +
- uint8_t(im_src.buffer[src_idx+n+W]) +
- uint8_t(im_src.buffer[src_idx+n+W+4]))/4;
- }
- }
- }
- std::swap(im_src, im_dst);
- }
Advertisement
Add Comment
Please, Sign In to add comment