PlgBlt()
-
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:
die berechnungen des mittelpunktes des 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 koordinaten. kann mir da evtl. jemand helfen?
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
und um euch ein wenig einsicht zu gewähren, hier noch ein bischen 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()
-
Ja wüsste auch gern wie man mit PlgBlt Grafiken dreht. Schnall das ebenfalls nicht wirklich

-
@$nooc:
(2) liegt daran dass du das Bild Stück für Stück immer weiter drehst. Also wenn x das Original-Bild ist, und f(x, 1) das um 1 Grad gedrehte Bild, dann berechnest du das um 2 Grad gedrehte Bild als f(f(x, 1), 1) anstelle es als f(x, 2) zu berechnen. Dadurch akkumulieren sich natürlich die Fehler und das Bild "verwischt".
Lösung: du musst das nicht gedrehte Original irgendwo aufbehalten, und die gedrehte Version immer ausgehend vom nicht gedrehten Original berechnen.