Bitmaps mit möglichst geringem Performanceverlust drehen
-
Hallo!
Wie kann ich Bitmaps um einen bestimmten Winkel drehen? Am besten mit möglichst geringem Performanceverlust da in einem kleinen Spiel ca. 50 Drehungen pro Sekunde kommen sollen! Ich könnte mir eine Funktion mit GetPixel und SetPixel schreiben jedoch zieht das zu viel Performance ab und ist so dann nicht spielbar!
Wäre super
Kevin
-
Falls Du unter >WinNT arbeitest, kannst Du das das GDI für Dich erledigen lassen
-> SetWorldTransform
-
Hmmm es sollte auf jedem System laufen....gibts da keine bessere Lösung?
Danke trotzdem
Kevin
-
Vielleicht das hier: http://www.codeproject.com/bitmap/rotatebyshear.asp
-
oder http://www.programmersheaven.com/zone10/cat345/
Suchmaschinen sind halt doch auch noch für was gut
-
Vielen dank!
Benutzt zwar alles ASM Routinen - aber wenn es keine verständlichere C++ Möglichkeit gibt versuch ich da was rauszupickenkevin
-
Benutzt gar nicht alles ASM ! http://www.programmersheaven.com/zone10/cat345/15441.htm
-
Könntest du dir nicht eine etwas inteligentere art überlegen?
-
hmmm wenn ich so etwas benutzen würde:
double cosT,sinT; cosT = cos(t); sinT = sin(t); for (y = min_y; y <= max_y; y++) { x' = (min_x-x1) * cosT + (y-y1) * sinT + x1'; y' = (y-y1) * cosT - (min_x-x1) * sinT + y1'; for (x = min_x; x <= max_x; x++) { if (x', y') is in the bounds of the bitmap, get pixel(x', y') and plot the pixel to (x, y) on screen. x' += cosT; y' -= sinT; } }
Dann wird immernoch sowas wie GetPixel udn SetPixel benutzt....jedoch allein schon wenn ich das ganze Bild einfahc nur per Get und SetPixel nochmal zeichen dauert dies eine halbe Ewigkeit..........
hmhmhm..dass das so schwer istKevin
-
beschäftige dich erstmal mit spieleprogrammierung. dann weißt du das man das sicherlich nicht so macht
-
bla - müssen solche postings sein? Ich will nur ein Bitmap rotieren....jetzt fängt schon wieder dieses sinnlos geposte an - na super
-
Ntürlich kannst du GetPixel und SetPixel verwenden, aber du könntest die Pixel auch in einem mit CreateDIBSection erzeugten Bitmap direkt manipulieren, das erlaubt dir direkten Speicherzugriff ... ohne DC ... is schnell
-
hm un wie?
Ich weiß dass ich get/setpixel verwenden kann aber das is halt furchtbar langsam...
-
Mit PlgBlt(...) ???
-
Windows 95/98/Me: Unsupported.
-
Original erstellt von Surkevin:
hm un wie?
Ich weiß dass ich get/setpixel verwenden kann aber das is halt furchtbar langsam...Richtig! Deshalb sollste ja auch DIBSections verwenden! Oder setz die Pixel mit SetDIBits(). Aber mit DIBSections geht's ganz sicher schneller. Schau in der MSDN nach CreateDIBSection().