Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bild um angegebene 90° 180° 270° drehen (https://www.delphipraxis.net/111932-bild-um-angegebene-90%B0-180%B0-270%B0-drehen.html)

andiak 11. Apr 2008 21:58


Bild um angegebene 90° 180° 270° drehen
 
Bisher habe ich es geschaft mein Bild Vertikal und Horizontal zu spiegeln mit folgender proceduren:

Delphi-Quellcode:
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;
funktioniert alles

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 :/

Corpsman 12. Apr 2008 08:47

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:

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;
Diese Lösung must du verstehn um sie entsprechend in dein Format ummünzen zu können ;)

viel spass damit.

andiak 12. Apr 2008 09:24

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

rollstuhlfahrer 12. Apr 2008 09:36

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 Bei Google suchendelphi Bild drehen gesucht??
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

SearchBot 12. Apr 2008 11:23

Re: Bild um angegebene 90° 180° 270° drehen
 
Irgendwoher habe ich eine Komponente namens "RotateImage", die macht alles außer spiegeln...

Muetze1 12. Apr 2008 14:43

Re: Bild um angegebene 90° 180° 270° drehen
 
Bei den Stichwörter "Grafik" und "Delphi" sollte einem eigentlich sofort efg's Computer Lab einfallen.

Rotate ScanLine
Flip, Reverse and Rotate
Graphics Algorithms

mz23 7. Mär 2012 16:20

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-}

Gustav.R 7. Mär 2012 16:51

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

SirThornberry 7. Mär 2012 17:21

AW: Bild um angegebene 90° 180° 270° drehen
 
Zum drehen (um beliebige Winkel) kann man PlgBlt verwenden.

Bummi 7. Mär 2012 17:33

AW: Bild um angegebene 90° 180° 270° drehen
 
http://www.delphipraxis.net/156716-g...-und-zoom.html
oder
http://www.delphipraxis.net/159553-b...eins-bild.html
#5 Grafiken drehen und Zoomen


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz