TGraphic drehen
Der Folgende Code ist auf dem
Code zum Drehen von Bitmaps von Finn-Ole Paulsen aufgebaut.
Mit diesem Code können Inhalte aus Images um 90 Grad gedreht werden. Um das zu ermöglichen, muss der Inhalt von TGraphic mittels einem Hilfsbitmap ("Sourcebmp" = Quellbmp) und dessen Routine Canvas.Draw gezeichnet. Da wir jetzt das Bild auf einem Bitmap haben, können wir es mit dem
Code von Finn-Ole Paulsen drehen.
Dazu müssen wir einen Typ definieren:
Delphi-Quelltext
1:
| type TRGBarray = array[0..0] of TRGBQuad; |
Der Code ist nun diese Procedure. Man muss ihr ein TGraphic Objekt und ein Bitmap in das gedreht werden soll übergeben werden. Für die restliche Erklärung der Procedure bitte den
Code von Finn-Ole Paulsen ansehen.
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:
| procedure rotate90(const Source:TGraphic ; Target: TBitmap); var P: PRGBQuad; y,x,h,b: integer; Rowout: ^TRGBarray; sourcebmp: TBitmap; begin sourcebmp:=TBitmap.Create; sourcebmp.PixelFormat:=pf32bit; sourcebmp.Height:=Source.Height; sourcebmp.Width:=Source.Width; sourcebmp.Canvas.Draw(0,0,Source); try Target.PixelFormat:=pf32bit; b:=sourcebmp.Height; h:=sourcebmp.Width; Target.Height:=h; Target.Width:=b; for y:=0 to (h-1) do begin rowout:=Target.ScanLine[y]; p:=sourcebmp.ScanLine[sourcebmp.height-1]; inc(p,y); for x:=0 to (b-1) do begin rowout[x]:=p^; inc(p,h); end; end; finally sourcebmp.Free; end; end; |
Ein Beispielaufruf könnte so aussehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button1Click(Sender: TObject); var Bitmap:TBitmap; begin Bitmap:=TBitmap.Create; try rotate90(Image1.Picture.Graphic,Bitmap); Image1.Picture.Graphic.Assign(Bitmap); Image1.Refresh; finally Bitmap.Free; end; end; |
lg el