bilder gespiegelt darstellen???



  • Guck dir mal GetBitmapBits an



  • // Zeigt das in [hdcSrc] enthaltene Bitmap mit der Breite [width]
    // und der Höhe [height] im Device Context [hdcDest] kopfüber an.
    // Die linke obere Ecke des Bitmaps muss in [hdcSrc] bei (0,0) 
    // sein.
    // ACHTUNG: PlgBlt() ist für die Win9x-Versionen nicht verfügbar.
    BOOL ToppleBitmap(HDC hdcDest, HDC hdcSrc, int width, int height)
    {
       POINT pt[3] = {{0, height-1}, {width, height-1}, {0,-1}};
       return PlgBlt(hdcDest, pt, hdcSrc, 0, 0, width, height, NULL, 0, 0);
    }
    


  • Oder meintest du es anders gespiegelt? Na dann...

    #define RB_HORIZONTAL  0
    #define RB_VERTICAL    1
    
    // Spiegelt das in [hdcSrc] enthaltene Bitmap mit der Breite [width]
    // und der Höhe [height] gemäß der in [wFlags] angegebenen Konstanten.
    // Die linke obere Ecke des Bitmaps muss in [hdcSrc] bei (0,0) 
    // sein. Das gespiegelte Bitmap wird im DeviceContext [hdcDest] bei
    // (0,0) gemalt.
    // ACHTUNG: PlgBlt() ist für die Win9x-Versionen nicht verfügbar.
    BOOL ReflectBitmap(HDC hdcDest, HDC hdcSrc, int width, int height, WORD wFlags)
    {
       POINT pt_h[3] = {{width-1,0}, {-1,0}, {width-1,height}};
       POINT pt_v[3] = {{0,height-1}, {width,height-1}, {0,-1}};
       LPPOINT lppt;
    
       if(wFlags == RB_HORIZONTAL)
          lppt = pt_h;
       else if(wFlags == RB_VERTICAL)
          lppt = pt_v;
       else return FALSE;
    
       return PlgBlt(hdcDest, lppt, hdcSrc, 0, 0, width, height, NULL, 0, 0);
    }
    


  • das mit PlgBlt() sieht vielversprechend aus, das werd ich jetzt mal gleich
    testen. Ist wohl die einfachere Variante gegenüber dem Vorschlag von deus.

    Dank euch beiden.



  • RobRoy schrieb:

    Ist wohl die einfachere Variante gegenüber dem Vorschlag von deus.

    Jo, so siehts aus.



  • Hi,

    ich bin zwar kein ultimativer Fan von Win98 (zum Spielen super, zum Arbeiten total unbrauchbar), aber ich denke es ist noch nicht an der Zeit übermäßig viele "in-Win9x-nicht-verfügbar-Funktionen" zu verwenden, da immer noch einige Win9x verwenden (Microsoft wollte diese User nicht an Linux verlieren und hat deshalb den Support für Win98/... verlängert :p => Win9x ist noch nicht tod) und PlgBlt ist nur in WinXP/2k verfügbar.
    Allerdings hängt das natürlich auch von der Programmart ab.
    Überlegs dir.

    Grüße Rapha



  • Na, dann eben

    #define RB_HORIZONTAL 0
    #define RB_VERTICAL   1
    
    BOOL ReflectBitmap(HDC hdcDest, HDC hdcSrc, int width, int height, WORD wFlags)
    {
       if(wFlags == RB_HORIZONTAL)
          return StretchBlt(hdcDest, 0, 0, width, height,
                            hdcSrc, width-1, 0, -width, height,
                            SRCCOPY);
       else if(wFlags == RB_VERTICAL)
          return StretchBlt(hdcDest, 0, 0, width, height,
                            hdcSrc, 0, height-1, width, -height,
                            SRCCOPY);
       else
          return FALSE;
    }
    

    Ist diesmal mit StretchBlt, was auf jedem System läuft. 😉



  • also PlgBlt() sowie StretchBlt() funzt, ich werde mich aber für die StretchBlt()-Variante entscheiden, da das Programm später auf möglichst jedem System laufen sollte.

    Besten Dank nochmal WebFritzi, auch dir Rapha für die Anmerkung bzl. Windows9x.

    Thanks...



  • Gerngeschehen. Hat mir auch Spaß gemacht, das zusammenzustellen.



  • PlgBlt soll auch dafür dienen drehen zu können. Würde gern 90° ein Bild drehen, kann es bisher nur mit StretchBlt verzerren. Kann mir jemand sagen wie das mit dem drehen bei PlgBlt funktioniert? Ich bin da absolut ahnungslos. 😞


Anmelden zum Antworten