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 2 von 2     12   
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#11

Re: Bild formatunabhängig 90° drehen

  Alt 2. Apr 2009, 22:34
Die Punkte geben die gewünschte Position an:

Der erste Punkt: Die obere, linke Ecke wird zum ersten Punkt verschoben, die obere rechte Ecke wird zum 2. Punkt verschoben und die untere linke Ecke wird zum dritten Punkt verschoben

Um 90° gegen den Uhrzeigersinn zu rotieren musst du:
Die OL-ecke nach unten verschieben
die OR-Ecke nach links und
die UL-Ecke nach rechts verschieben
  Mit Zitat antworten Zitat
Schwedenbitter

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

Re: Bild formatunabhängig 90° drehen

  Alt 2. Apr 2009, 23:02
Zitat von jfheins:
Die Punkte geben die gewünschte Position an:

Der erste Punkt: Die obere, linke Ecke wird zum ersten Punkt verschoben, die obere rechte Ecke wird zum 2. Punkt verschoben und die untere linke Ecke wird zum dritten Punkt verschoben
Das hatte ich dem (englischen) Hilfetext bereits entnommen.
Zitat von jfheins:
Um 90° gegen den Uhrzeigersinn zu rotieren musst du:
Die OL-ecke nach unten verschieben
die OR-Ecke nach links und
die UL-Ecke nach rechts verschieben
Jetzt habe ich es endlich verstanden! Also so:

Delphi-Quellcode:
Points[0]:=Point(0,tmpBitmap.Width);
Points[1]:=Point(0,0);
Points[2]:=Point(tmpBitmap.Height,tmpBitmap.Width);
Gruß und Dank, Alex

Nachfrage:
Gibt es eine noch schnellere, ähnlich einfache Methode? Für das Drehen eines Bildes mit 1660x2340 braucht mein Celereon M mit 1,86 GHz immerhin ca. 470 ms.
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#13

Re: Bild formatunabhängig 90° drehen

  Alt 3. Apr 2009, 08:40
Du könntest hier mal die vierte probiren, vielleicht ist das etwas schneller: http://www.leunen.com/cbuilder/rotbmp.html

Also das Bitmap kopieren (evtl. mit BitBlt statt Bitmap.Assign) dann auf advanced setzen, dann setworldtransform aufrufen und dann mit bitblt wieder rüberkopieren.
  Mit Zitat antworten Zitat
Schwedenbitter

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

Re: Bild formatunabhängig 90° drehen

  Alt 3. Apr 2009, 15:52
Zitat von jfheins:
Du könntest hier mal die vierte probiren, vielleicht ist das etwas schneller: http://www.leunen.com/cbuilder/rotbmp.html
Danke. Das werde ich mir mal bei Gelegenheit ansehen!

Jetzt eine weitere Frage: Warum wird das Bild mit diesem Code nicht um 180' gedreht?
Delphi-Quellcode:
Points[0]:=Point(help.Height,help.Width);
Points[1]:=Point(help.Height,0);
Points[2]:=Point(0,help.Width);
Ich bin wieder nach demselben Muster wie beim Drehen nach links bzw. rechts vorgegangen. Die erste Ecke nach ... usw. Und trotzdem klappt es nicht. Ich habe es mehrmals mit Zetteln probiert, wo ich in die Ecken die Zahlen gemahlt hatte.
Geht des nicht mit PlgBlt?

Gruß und schonmal schönes WE, Alex
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#15

Re: Bild formatunabhängig 90° drehen

  Alt 3. Apr 2009, 17:21
Ich tippe darauf:
Delphi-Quellcode:
Points[0]:=Point(help.Height,help.Width);
// Obere, linke Ecke soll nach unten rechts - okay ... aber nur für quadratische Bilder.
// Mein Tipp:
Points[0]:=Point(help.Width,help.Height);

Points[1]:=Point(help.Height,0);
// Obere, rechte Ecke soll nach ... oben rechts??
// Mein Tipp:
Points[1]:=Point(0,help.Height);

Points[2]:=Point(0,help.Width);
// Untere, linke Ecke soll nach ... unten links?
// Mein Tipp:
Points[2]:=Point(help.Width,0);
Guck mal ob das geht
  Mit Zitat antworten Zitat
Schwedenbitter

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

Re: Bild formatunabhängig 90° drehen

  Alt 3. Apr 2009, 18:03
Zitat von jfheins:
Ich tippe darauf:
Delphi-Quellcode:
Points[0]:=Point(help.Width,help.Height);
Points[1]:=Point(0,help.Height);
Points[2]:=Point(help.Width,0);
Es geht leider nur fast :

Generellt dreht er das Bild so tatsächlich um 180'. Aber es gibt dann einen Rand um das Bild, der nicht gedreht wird (obere Zeile und linke Spalte). Da immer die Minimalwerte genommen werden (0 und 0), kann ich mir das nicht erklären.

Außerdem stimmt das mit dem Quadrat auch nur fast. Denn wenn ich das Bild um 180' drehe, hat es meiner Meinung nach dieselben Abmessungen wie das Ausgangsbild. Aus 320x234 werden doch wieder 320x234; nur eben auf dem Kopf. Aus diesem Grunde steht ja sicherheitshalber auch noch
Delphi-Quellcode:
Image1.Picture.Bitmap.Width:=help.Width;
Image1.Picture.Bitmap.Height:=help.Height;
mit dabei, bevor PlgBlt ausgeführt wird...

Woher kommt jetzt wieder der Rand? Soll ich nochmal meinen aktuellen Code hochladen?

Gruß, Alex
Miniaturansicht angehängter Grafiken
bild1_611.png  
Alex Winzer
  Mit Zitat antworten Zitat
Schwedenbitter

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

Re: Bild formatunabhängig 90° drehen

  Alt 20. Apr 2009, 17:02
Für die Drehung um 180° habe ich leider noch keine Lösunmg gefunden, die 100%ig funktioniert. Aber ich habe ein weiteres Problem:

Mein Programm war nur die Übrung für etwas größeres .
Ich scanne mehrere Bilder mit einem Scanner ein und möchte die dann drehen und strecken bzw. stauchen. Ich habe nun den Code an mein bestehendes Programm angepasst und nun funktioniert er nicht mehr.

Ich scanne die Bilder ein und packe Sie alle in eine TObjectList, wobei ich die Liste mit Bilder.Add(TBitmap.Create); erweitere und die Bilder mit TBitmap(Bilder.Last).Assign(Image); ablege. Wenn der Scanner fertig ist, werden die der Reihe nach wieder ausgelesen und aus der Liste gelöscht. Theoretisch müsste das hier doch klappen:
Delphi-Quellcode:
TBitmap(Bilder.Items[0]).Width:=help.Height;
TBitmap(Bilder.Items[0]).Height:=help.Width;
Points[0]:=Point(0,help.Width);
Points[1]:=Point(0,0);
Points[2]:=Point(help.Height,help.Width);
PlgBlt(TBitmap(Bilder.Items[0]).Canvas.Handle, Points,
       help.Canvas.Handle, 0, 0,
       help.Width, help.Height, 0, 0, 0);
Aber leider bekomme ich nur ein Bild, bei dem sich Höhe und Breite geändert haben. Das ist logisch, weil diese geändert werden. Ich habe die Vermutung, dass PlgBlt nicht (richtig) ausgeführt wird. Bei meinen Versuchen, dieses mittels einer Bool-Variable abzufragen, bekomme ich immer ein positives Ergebnis (=dasselbe wie in meinem Testprogramm, wo es ja klappt).

Was mache ich falsch?
Alex Winzer
  Mit Zitat antworten Zitat
Schwedenbitter

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

Re: Bild formatunabhängig 90° drehen

  Alt 4. Mai 2009, 14:31
Zitat von Schwedenbitter:
Ich habe die Vermutung, dass PlgBlt nicht (richtig) ausgeführt wird.
Ich habe jetzt genügend herum experimentiert und kann PlgBlt als Übeltäter bezeichnen.
Ich habe mehrere Bilder erzeugt/erzeugen lassen. Ab einer bestimmten Größe klappt PlgBlt nicht mehr. In meinem Fall sind das Bilder mit den Maßen 8,3 x 11,7 Zoll (= DIN A4). Bis exakt 293 dpi (= 2432 x 3428) klappt es prima. Ab den nächstgrößeren Pixeln geht nichts mehr. Es wird nur noch der erste Schritt getan; nämlich die Abmessungen des Bildes vertauscht.
Ich weiß auch nicht, ob das eventuell ein Phänomen von TurboDelphi 2006 sein kann. Ich schließe das fast aus, weil es sich - korrigiert mich, wenn's falsch ist - bei PlgBlt um eine Windows-Funktion handelt.

Kann mir da bitte jemand weiter helfen? Gibt es noch andere Funktionen?

Alex
Alex Winzer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 07:54 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