![]() |
Fehler beim Drehen eines Bildes
Hallo!!
Ich möchte ein Bild drehen, habe auch schon ne Procedure, aber ich sehe kein Ergebnis. Stattdessen bleibt das vorherige BIld wie es war in der TImage Komponente und wenn man mit einem anderen Fenster rüberfährt ist plötzlich nichts mehr zu sehen. Ich hatte die Selbe Procedure auch in einem anderen Programm verbaut, da funktioniert sie einwandfrei, deshalb kann ich mir nicht erklären, warum das bei mir nicht so ist. Bitte um jede Hilfe!! |
Re: Fehler beim Drehen eines Bildes
Hast du auch ein Code-Beispiel? Wenn es zu lang ist, kannst dus ja als Datei anhängen.
|
Re: Fehler beim Drehen eines Bildes
Declaration
Delphi-Quellcode:
die Procedure :
type
TRGBArray = ARRAY[0..0] OF TRGBTriple; pRGBArray = ^TRGBArray; THelpRGB = packed record rgb : TRGBTriple; dummy : byte; end;
Delphi-Quellcode:
aber vielleicht gibt es ja auch ne andere Möglichkeit, das Bild zu drehen.
procedure Drehen(Bitmap:TBitmap);
var P : PRGBQuad; //^THelpRGB; 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; |
Re: Fehler beim Drehen eines Bildes
Hallo diese Procedure ist aus nem DoKo- buch oder?
sie ist nicht sauber (Bereichsprüfung muß deaktiviert sein) aber ise geht. wie sieht denn dein Aufruf aus? bei DokO ist auch ein Beipsiel mit dabei
Delphi-Quellcode:
Mfg Frank
procedure TForm1.Button2Click(Sender: TObject);
begin image1.Picture.bitmap.PixelFormat := pf24bit; Drehen90Grad(image1.picture.bitmap); end; |
Re: Fehler beim Drehen eines Bildes
Die Procedure hab ich aus einem Buch, welches wir in der Schule bekommen haben. Der Aufruf sieht genauseo aus, wie du ihn beschriben hast, nur funktioniert es nicht. Vielleicht hast du ja noch eine andere Lösung für das Problem. Wenn ja, kannst du sie bitte hiuer reinstellen??
mfg Hazardos |
Re: Fehler beim Drehen eines Bildes
So gehts (bei mir):
Delphi-Quellcode:
procedure Drehen90Grad(Bitmap:TBitmap);
var P : PRGBQuad; x,y,b,h : Integer; RowOut : PRGBQuad; // <-- Hier Typ geändert 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^ := p^; // <-- Und hier geändert Inc(rowout); // <--- Das dazu inc(p,h); end; end; bitmap.Assign(help); end; |
Re: Fehler beim Drehen eines Bildes
Es ist echt zum Verzweifeln. Ich kann mir einfach nicht erklären, warum das nicht läuft, obwohl es bei dem anderen Programm läuft. Auch deine Änderungen haben nichts bei mir bewirken können. Habe ich vielleicht irgendwas vergessen?? In der Projekt-Unit oder im FormCreate??
|
Re: Fehler beim Drehen eines Bildes
Na, dann erzähl mal ein paar Sachen. Ist das ein Bitmap (BMP), das du in TImage hast? Lädst du das Bild nachträglich per LoadFromFile oder was rein oder über die IDE?
|
Re: Fehler beim Drehen eines Bildes
Hauptsächllich werden jpegs via LoadFromFile reingeladen. Dazu habe ich einfach die JPEG-Unit hinzugefügt.
|
Re: Fehler beim Drehen eines Bildes
Da das Drehen auf Bitmapebene passiert, müssen die Daten erstmal umgewandelt werden:
Delphi-Quellcode:
function Graphic2Bmp(AGraphic : TGraphic) : TBitmap;
begin result := TBitmap.Create; result.PixelFormat := pf24bit; result.Height := AGraphic.Height; result.Width := AGraphic.Width; result.Canvas.Draw(0, 0, AGraphic); end;
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin If not image1.Picture.Graphic.Empty then image1.Picture.bitmap := Graphic2Bmp(image1.Picture.Graphic); image1.Picture.bitmap.PixelFormat := pf24bit; Drehen90Grad(image1.picture.bitmap); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:36 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