AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bild formatunabhängig 90° drehen

Ein Thema von Nils_13 · begonnen am 24. Apr 2008 · letzter Beitrag vom 4. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2      
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

Bild formatunabhängig 90° drehen

  Alt 24. Apr 2008, 20:05
Hi,

gibt es eine Möglichkeit, ein TPicture oder noch besser TCanvas um 90° zu drehen und das ganze ohne TBitmap ? Habe bisher nur bitmapbasierende Methoden gefunden, aber Bitmaps kommen bei mir nicht in Frage.
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Bild formatunabhängig 90° drehen

  Alt 24. Apr 2008, 20:31
Ist Umständlich, aber

mit Canvas.Pixels bekomst du jeden Wert.

Den kannst du in ein Array speichern ( Im Prionzip ist ein TBitmap, ja nichts anderes ) Dann Drehst dud as Array und kannst mit Canvas.pixels wieder zurückschreiben.

Das ganze hat nur den Hacken das Canvas.pixels eben unheimlich langsam arbeitet, weswegen alle Welt das mit TBitmap macht, denn da hat man Scanline
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#3

Re: Bild formatunabhängig 90° drehen

  Alt 24. Apr 2008, 20:38
Hm, ist bloß die Frage, ob es schneller ginge, erst ein beliebiges Format zu konvertieren um dann für einen kurzen Moment Scanline zu nehmen.
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Bild formatunabhängig 90° drehen

  Alt 25. Apr 2008, 12:59
Also wenn wir davon ausgehen das dein Bild 1 M Pixel ist dann auf alle Fälle Ja.

Canvas.Pixels ist wirklich Extrem Langsam.

Im Zweifel probiere es aus.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Bild formatunabhängig 90° drehen

  Alt 25. Apr 2008, 13:26
Mit PlgBlt kannst du ein Bild auf einer Canvas drehen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Lossy eX
Lossy eX

Registriert seit: 7. Aug 2007
113 Beiträge
 
#6

Re: Bild formatunabhängig 90° drehen

  Alt 25. Apr 2008, 14:07
Mal anders gefragt. Wieso kommen bei dir Bitmaps nicht in Frage? Denn die Methode zum Zeichnen auf einer Canvas benötigen im Hintergrund eigentlich irgendwo immer ein Bitmap. Bei geladenen JPEGs schmettert es aber bereits die Klasse ab. Also dort kann man das Canvas nur zum Lesen benutzen. Zum Zeichnen braucht man wieder ein Bitmap.
Ich habe ja keine Vorurteile gegenüber Autofahrern ... aber Fahrer von BMW und Mercedes bestätigen diese regelmäßig.
Außerdem neue technologische Errungenschaften: Serienmäßig eingebaute Rechtsfahrsperre und der stromsparende Blinker.
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#7

Re: Bild formatunabhängig 90° drehen

  Alt 28. Apr 2008, 20:53
Die Lösung ist simpel, man muss aber erstmal drauf kommen. Man zeichnet sich die JPG/PNG/... auf ein TBitmap. Dann kann man mit Hilfe dieses Bitmaps machen was man will, sogar zum Schluss ein TPicture/TGraphic zurückgeben. Diese Funktion lag schon seit langem in fehlerhafter Form auf meiner Platte, sie ist also nur in geringer Form von mir, da sie vorher schon funktionierte. Sie hatte allerdings ein paar Fehler bzw. es fehlten für meine Verwendungszwecke noch Sachen. Die Sache mit dem TPicture als Rückgabewert und dass es überhaupt eine Funktion ist (war vorher eine Prozedur) stammen zum Beispiel von mir. Die Funktion ist auf jeden Fall schnell genug und konvertieren muss man in dem Sinne schon, allerdings unabhängig vom Dateiformat, solange dieses von Delphi unterstützt wird. Der Vorschlag es zu konvertieren kam von eurer Seite schon, allerdings verstand ich ihn etwas falsch, weil ich sofort ein die Funktion JPGtoBMP dachte, die irgendwo in meinen Units noch vor sich hin gammelt. Dann auf jeden Fall ein großes Danke, denn eure Vorschläge waren allesamt gut und ich hätte es auch schnell alles umsetzen können, hätte ich euch sofort verstanden.
Delphi-Quellcode:
type
  TRGBQuad = packed record
    B, G, R, A : Byte;
  end;
  PRGBQuad =^TRGBQuad;
  TRGBarray = Array[0..0] of TRGBQuad;

function Rotate90(const Source : TGraphic) : TPicture;
var P : PRGBQuad;
    Y, X, H, W : Integer;
    RowOut : ^TRGBarray;
    SrcBmp : TBitmap;
begin
  SrcBmp := TBitmap.Create;
  with SrcBmp do
  begin
    PixelFormat := pf32bit;
    Height := Source.Height;
    Width := Source.Width;
    Canvas.Draw(0, 0, Source);
  end;

  if Result <> nil then
    Result := TPicture.Create;
  Result.Bitmap.PixelFormat := pf32bit;
  W := SrcBmp.Height;
  H := SrcBmp.Width;
  Result.Bitmap.Height := H;
  Result.Bitmap.Width := W;
  for Y := 0 to Pred(H) do
  begin
    RowOut := Result.Bitmap.ScanLine[Y];
    P := SrcBmp.ScanLine[Pred(SrcBmp.Height)];
    inc(P, Y);
    for X := 0 to Pred(W) do
    begin
      RowOut[X] := P^;
      inc(P, H);
    end;
  end;
  SrcBmp.Free;
end;
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Bild formatunabhängig 90° drehen

  Alt 29. Apr 2008, 07:20
und mit der Nutzung von Scanline ist es wirklich schneller als mit PlgBlt? Kann ich fast nicht glauben.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Bild formatunabhängig 90° drehen

  Alt 5. Sep 2008, 00:03
Ich schreibe hier, weil der Thread noch relativ kurz und übersichtlich scheint:

Alle Drehalgorhytmen haben - wenn ich das richtig sehe - gemeinsam, dass sie die Pixel über Scanlines ansprechen, die wiederum aus mehrdimensionale Arrays zusammengesetz sind. Egal welchen Code ich mir hier ansehe, werden die Bilder vor dem Drehen unabhängig von ihrer bisherigen Bittiefe auf 24 oder gar 32 bit gesetzt. Das an sich ist ja auch OK und mir letztlich egal.

Wie bringe ich es fertig, das Bild hinterher wieder Schwarzweiß (pf1bit) zu machen?

Durch das Setzen des Pixelformats klappt es jedenfalls bei mir nicht. Das Bild bekommt dann immer einen Blaustich.
Alex Winzer
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Bild formatunabhängig 90° drehen

  Alt 2. Apr 2009, 22:22
Hallo,

ich weiß, dass das Thema schon alt ist. Ich will aber kein neues aufmachen, weil die Frage im Thema den Nagel auf den Kopf trifft.Ich drehe meine Bilder jetzt mit dieser Procedure. Unabhängig von der Farbe nach dem Drehen habe ich noch eine Frage:

Wie drehe ich das Bild gegen den Uhrzeigersinn?

Gruß, Alex
Alex Winzer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:59 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