PlgBlt()

$nooc

Mitglied
Hallo Leute!
Ich plage mich im Moment mit der Funktion PlgBlt() herum.

Ich würde gerne ein Bild das ich anzeige drehen. Folgendes läuft dabei schief:

1. Die Berechnungen der Koordinaten des Mittelpunktes meines Bildes sind nicht richtig. Das Bild wird nur gedreht, wenn es sich in der linken, oberen Ecke befindet. Bewege ich es von da weg, kann ich es nicht mehr drehen. Anscheinend berechne ich die falschen Koords. Kann mir da evtl. jemand helfen?

2. Wenn das Bild in der linken Ecke steht, kann ich es drehen. Jedoch nicht ganz korrekt. Das Bild "verwischt" falls ich das so sagen kann. Es wird verzerrt. Um zu zeigen was ich meine uppe ich ein Bild:

http://img99.imageshack.us/img99/2707/asdux0.jpg

Um euch noch ein wenig mehr Einblick zu gewähren, hier noch ein bischen Code:

Code:
void GfxDevice::rotateBitmap (const BITMAPINFO bmInfo, signed int *degree)
{
    POINT    destPt[3];

    //        angle    = degToRad(degree);
    double    cosa    = cos(degToRad(*degree));
    double    sina    = sin(degToRad(*degree));
    int        halfW    = bmInfo.bmiHeader.biWidth / 2;
    int        halfH    = bmInfo.bmiHeader.biHeight / 2;

    destPt[0].x = static_cast<long>( (tplayer.xPos() + halfW) + (-halfW * cosa + halfH * sina) );
    destPt[0].y = static_cast<long>( (tplayer.yPos() + halfH) + (-halfW * sina - halfH * cosa) );

    destPt[1].x = static_cast<long>( (tplayer.xPos() + halfW) + (halfW * cosa + halfH * sina) );
    destPt[1].y = static_cast<long>( (tplayer.yPos() + halfH) + (halfW * sina - halfH * cosa) );

    destPt[2].x = static_cast<long>( (tplayer.xPos() + halfW) + (-halfW * cosa - halfH * sina) );
    destPt[2].y = static_cast<long>( (tplayer.yPos() + halfH) + (-halfW * sina + halfH * cosa) );

    *degree = 0;

    int ret;
    ret = PlgBlt(tplayer.hDC(0), destPt, tplayer.hDC(0), tplayer.xPos(), tplayer.yPos(), bmInfo.bmiHeader.biWidth, bmInfo.bmiHeader.biHeight, NULL, 0, 0);
} // rotateBitmap()
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück