![]() |
Bild um angegebene 90° 180° 270° drehen
Bisher habe ich es geschaft mein Bild Vertikal und Horizontal zu spiegeln mit folgender proceduren:
Delphi-Quellcode:
funktioniert alles
procedure VertikalSpiegele(Bild1:TImage);
var x,y:integer; hilf : TColor; begin for x:=0 to Bild1.width div 2 - 1 do for y:=0 to Bild1.height - 1 do begin hilf := Bild1.canvas.pixels[x,y]; Bild1.canvas.pixels[x,y]:=Bild1.canvas.pixels[Bild1.width-1-x,y]; Bild1.canvas.pixels[Bild1.width-1-x,y] := hilf; end end; procedure HorizontalSpiegeln (Bild1:TImage); var x,y:integer; hilf : TColor; begin for x:=0 to Bild1.width - 1 do for y:=0 to Bild1.height div 2 - 1 do begin hilf := Bild1.canvas.pixels[x,y]; Bild1.canvas.pixels[x,y]:=Bild1.canvas.pixels[x,Bild1.height-1-y]; Bild1.canvas.pixels[x,Bild1.height-1-y] := hilf; end end; jetzt muss ich es nur noch hinbekommen das auf befehl das bild um angegeben 90°.... gedreht wird machen wollte ich das mit dem Objekt RatioBox und halt nen button... Ne idee wie der befehl aussehen muss? StretchBlt und co soll ich nicht verwenden sondern in der art wie ich das oben geschrieben habr :/ |
Re: Bild um angegebene 90° 180° 270° drehen
Hi, würdest du ein Blatt Papier nehmen und 2 Bilder hinmalen und dann "Von Hand" mal die ersten Pixel rotieren würdest du es sofort sehen, wies geht.
Aber anscheinend ist dir das zu kompliziert. Kann ich verstehn so eine Frage in der DP ist ja schnell gestellt. Auch wenn das bedeutet das wir hier wieder irgendwelche Hausaufgaben beantworten. Deswegen sollst du mal diese Lösung hier bekommen :
Delphi-Quellcode:
Diese Lösung must du verstehn um sie entsprechend in dein Format ummünzen zu können ;)type TMyhelp = array[0..0] of TRGBQuad; procedure Drehen90Grad(Bitmap:TBitmap); var P : PRGBQuad; //ist in der Windows Unit x,y,b,h : Integer; RowOut : ^TMyHelp; help : TBitmap; BEGIN Bitmap.PixelFormat := pf32bit; help := TBitmap.Create; help.PixelFormat := pf32bit; b := bitmap.Height; h := bitmap.Width; help.Width := b; help.height := h; for y := 0 to (h-1) do begin rowOut := help.ScanLine[y]; P := Bitmap.scanline[bitmap.height-1]; inc(p,y); for x := 0 to (b-1) do begin rowout[x] := p^; inc(p,h); end; end; bitmap.Assign(help); end; viel spass damit. |
Re: Bild um angegebene 90° 180° 270° drehen
ich hab mir da schon gedanken zu gemacht.... und meine beiden codes habe ich ja auch verstanden das der code z.b. bei horizontal von unten ein pixel farbpunkt nimmt den oben einfügt während dessen den oberen unten einfügt und so weiter und div2 damit das kopieren und einfügen der bildpunkte nur bis zur mitte geht... sonst würde es ja doof aussehen
Ich bin leider nur total unbewandert mit den codes... aber kennt jemand ne Seite wie Selfhtml? wo mann das alles nachlesen kann? dann könnte ich mir das bestimmt auch selbst besser beibringen |
Re: Bild um angegebene 90° 180° 270° drehen
HI,
mein Vorposter aus Post #2 hat ja recht, sich so auszudrücken. Wenn ich etwas brauche, suche ich zuerst, ob es schon jmand gemacht hat (Copy&Lern), dann versuche ich es selbst und erst dann wird im Forum gepostet. Frage: Scon mal in Google nach ![]() Falls dann auf der 1. Seite nichts brauchbares ist, wobei in dem Fall schon das Ergebnis auf Seite 1 präsentiert wird, kann man dann die Suchanfrage verfeinern. rollstuhlfahrer |
Re: Bild um angegebene 90° 180° 270° drehen
Irgendwoher habe ich eine Komponente namens "RotateImage", die macht alles außer spiegeln...
|
Re: Bild um angegebene 90° 180° 270° drehen
Bei den Stichwörter "Grafik" und "Delphi" sollte einem eigentlich sofort efg's Computer Lab einfallen.
![]() ![]() ![]() |
AW: Bild um angegebene 90° 180° 270° drehen
Delphi-Quellcode:
mirror a TImage Left-Right and Up-Down
by M.Z. March 5, 2012 {-mirror up-down-} procedure TImageEdit.bMirrorUpDnClick(Sender: TObject); var dx, dy : integer; begin dx:=imaDest.Width; dy:=imaDest.Height; imaDest.Canvas.CopyRect(Rect(0,0,dx,dy), imaDest.Canvas,Rect(0,dy,dx,0)); end; {-mirror left-right-} procedure TImageEdit.bMirrorLeRiClick(Sender: TObject); var dx, dy : integer; begin dx:=imaDest.Width; dy:=imaDest.Height; imaDest.Canvas.CopyRect(Rect(0,0,dx,dy), imaDest.Canvas,Rect(dx,0,0,dy)); end; {-rotating 180 degrees-} procedure TImageEdit.bRot180Click(Sender: TObject); var dx, dy : integer; begin dx:=imaDest.Width; dy:=imaDest.Height; imaDest.Canvas.CopyRect(Rect(0,0,dx,dy), imaDest.Canvas,Rect(dx,dy,0,0)); end; {-we need: ImageEdit: TForm-} {- imaDest: TImage-} {- bMirrorUpDn, bMirrorLeRi, bTor180: TButton-} |
AW: Bild um angegebene 90° 180° 270° drehen
Zwischen 2008 und 2012 ging offensichtlich die Deklaration von imaDest verloren.
Sir Rufo, wo bleibt Ihr Kommentar dazu :wink: GG |
AW: Bild um angegebene 90° 180° 270° drehen
Zum drehen (um beliebige Winkel) kann man PlgBlt verwenden.
|
AW: Bild um angegebene 90° 180° 270° drehen
![]() oder ![]() #5 Grafiken drehen und Zoomen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz