hmm ok hier also mal on-the-fly, also ohne Gewährleistung der syntaktischen Korrektheit...
Ich implementier das mal als Nachfahre von TImage
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50:
| TDrehargument = (90grad,180grad,270grad);
type TDrehbild = class(Timage) private tempmap : TBitmap; procedure 90drehen; procedure 180drehen; procedure 270drehen; public procedure drehen(argument:TDrehargument);
procedure TDrehbild.drehen(argument:TDrehargument); begin if argument = 90grad then 90drehen; if argument = 90grad then 180drehen; if argument = 90grad then 270drehen; end;
procedure TDrehbild.90drehen; var xx,yy : integer; begin tempmap := TBipmap.create; tempmap.assign(picture.bitmap); with tempmap do begin for xx := 0 to tempmap.width do begin picture.bitmap.pixels[xx,0] := pixels[yy,xx] inc(yy); end; end; tempmap.free;
end; end;
procedure TDrehbild.180drehen; begin end;
procedure TDrehbild.270drehen; begin end; |
Ein Aufruf würde dann so aussehen :
Delphi-Quelltext
1: 2: 3: 4:
| var bild : TDrehBild;
bild.drehen(270grad); |
Das mit dem TDrehbild Typ muss nicht unbedingt sein. Du kannst auch einen Integer übergeben lassen. Ich find sowas aber ganz schick...
Theorethisch könntest du auch nur die 90-Drehung implementieren und dann für eine 180Grad Drehung zweimal und für 270Grad dreimal ausführen

Is aber irgendwie rookiestyle......
Das mit dem temporären Bitmap ist nötig, da du ja Punkte überschreibst die du noch nicht verschoben hast... Würde etwas komisch aussehen
Die Variablen Namen xx und yy sind deshalb zweistellig um verwechslungen mit x und y als Parameter von Pixels[x,x] auszuschliessen...
Bei den anderen Drehungen musst du nur analog vorgehen.. Du musst überlegen wo jeder Pixel "hinwandert" oben links der geht auf oben rechts (bei 90 Grad, (Standardmässig gegen den Uhrzeigersinn)) . Zeile 1 Punkt 2 = Zeile 2 letzter Punkt ...
Zeile 1 Punkt 3 = Zeile 3 letzter Punkt.. etc...
Evtl. nochmal die OnlineHilfe zu Pixels[x,y] bemühen, dann sollte es klappen Der Rest ist nurnoch ein bischen rumgefrickel mit For-Schleifen...
Catweasel
Pommes werden schneller fertig wenn man sie vor dem Frittieren einige Minuten in siedendes Fett legt.