Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Algorytm blit - 'wklejanie' z offsetem

Ostatnio zmodyfikowano 2014-09-27 22:29
Autor Wiadomość
Monika90
» 2014-09-27 22:29:10
A coś takiego?
C/C++
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
P-117691
1 « 2 »
Poprzednia strona Strona 2 z 2