Algorytm blit - 'wklejanie' z offsetem
Ostatnio zmodyfikowano 2014-09-27 22:29
Monika90 |
» 2014-09-27 22:29:10 A coś takiego? struct Img { std::vector < unsigned char > px; int w, h; };
void blit( Img & dest, int dx, int dy, const Img & src, int sx, int sy, int sw, int sh ) { auto d = dest.px.data() +( dy * dest.w + dx ) * 4; auto s = src.px.data() +( sy * src.w + sx ) * 4; if( sh > 0 ) std::memcpy( d, s, sw * 4 ); for( int i = 1; i < sh; ++i ) { d += dest.w * 4; s += src.w * 4; std::memcpy( d, s, sw * 4 ); } }
Zakładamy że wszystkie parametry mieszczą sie w zakresie, jak nie to mamy UB. Jeżeli obszar docelowy i źródłowy się nakładają na siebie to też mamy UB. dest to obrazek docelowy dx, dy to współrzędne lewego górnego rogu prostokąta docelowego src - obrazek źródłowy sx, sy - współrzędne lewego górnego rogu prostokąta źródłowego sw, sh - szerokość i wysokość prostokąta źródłowego |
|
1 « 2 » |