![]() |
Bild um einen Bestimmten Winkel drehen
Erstmal ein herzliches Hallo in diesem Forum, bin ein Neuling =)
Stehe seit Tagen vor einem entscheidendem Problem: Wie kann ich ein Bild (Bitmap) um einen Bestimmten Winkel drehen? Ist es überhaupt möglich, dies zu schaffen ohne einzelne Pixelwerte abzufragen? Bin für jeden Hinweis sehr dankbar! ps: Es geht hierbei um ein Projekt für die erstellung symmetrischer Ornamente. Dazu brauche ich unbedingt Die Achsen und Punktspiegelungs, sowie die Drehung... |
Re: Bild um einen Bestimmten Winkel drehen
Hallo nano,
zunächst einmal herzlich willkommen im Delphi PRAXIS Forum. Ich hatte vor einiger Zeit auch das Problem und habe es mit der TRotateImage Komponete, die du ![]() |
Re: Bild um einen Bestimmten Winkel drehen
Ebenfalls HERZLICH WILLKOMMEN :party:
Oder falls du mehr machen willst (nicht nur drehen, auch z.B. Transparenz ...) verwende doch ![]() Edit: War von mir etwas kurz ausgedrückt :oops: etwas genauer: Graphics 32 bietet eigene Komponenten als Ersatz für z.B. TImage. Damit kann man z.B. ein Bild über ein anderes legen, jedoch mit teilweise Transparenz (worauf ich mich zuerst beziehen wollte). Es werden auch Möglichkeiten geboten, um Bilder mit Filtern zu vergrößern bzw. zu verkleinern, wodurch man dann beim Vergrößern nicht die einzelnen Pixel erkennen kann. Diese Kompos bieten dann aber noch einige Funktionen mehr... wenn du willst oder Interesse hast, kannst du sie ja einmal ausprobieren. LG, Delphi-Freak |
Re: Bild um einen Bestimmten Winkel drehen
Liste der Anhänge anzeigen (Anzahl: 1)
Vorneweg: Ohne einzelne Pixelmanipulation geht gar nichts.
Dann kommt es darauf an, um welche Winkel du drehen willst. Sollen es nur Vielfache von 90° sein, findest du sicher im Internet Prozeduren fürn ein normales TBitmap. Sollen es auch andere Winkel sein, wird das Ganze schon schwieriger. Es ist sicher immer noch mit den Standardkomponenten von Delphi zu schaffen, allerdings wird das Bitmap danach nicht sehr schön aussehen, wenn du einfach jedem Pixel die Farbe des entsprechenden Pixels zuweist. Der nächster Schritt wäre, die Pixel auch mit Float-Koordinaten anzusprechen, damit ein Pixel, das nach der Drehung "zwischen den echten Pixeln landet", auf alle umgebenden im richtigen Verhältnis "abfärbt". Spätestens hier würde ich allerdings zur ![]() Ich hänge mal eine Demo-Echse der Library an (PixelFS = Floatkoordinaten). [add]Ich bin zu langsam :mrgreen: . Aber das kann man trotzdem stehen lassen, denke ich. [/add] |
Re: Bild um einen Bestimmten Winkel drehen
Dafür hast du's trotz meines Edits besser ausgedrückt und außerdem einen besseren Link :wink:
|
Re: Bild um einen Bestimmten Winkel drehen
vielen Dank für eure Tipps.. Hab heute graphics32 installiert, aber noch nicht getestet... Gibts da vielleicht noch deutsch onlinehilfe dazu?
danke! |
Re: Bild um einen Bestimmten Winkel drehen
Nö :wink: .
Englisch gehört einfach zum Programmieren dazu, da geht (oft) kein Weg vorbei. |
Re: Bild um einen Bestimmten Winkel drehen
dafür gibt es die Funktion PlgBlt
|
Re: Bild um einen Bestimmten Winkel drehen
versuche jetzt in meinem Proggie alle TImage Komponente durch TImage32 zu ersetzen.. Gleich ein Paar Fragen:
1. Wenn das Fenster minimiert oder durch ein anderes überdeckt wird, erlischt das Bild an dieser Stelle.. Wie kann man das vermeiden? 2. Wohin soll man am besten Zeichnen? Aufs Canvas oder Bitmap direkt? 3. Image32.Bitmap.LineTo verlangt nun nach einem neuen Parameter vom typ HDC, was ist das überhaupt? (OnlineHilfe hat mich nicht schlauer gemacht :-/) danke! |
Re: Bild um einen Bestimmten Winkel drehen
Zitat:
Zitat:
Soweit ich das Verstehe, kannst Du immer nur auf Canvas zeichnen. Du kannst aber zwischen TForm.canvas und TBitmap.canvas auswählen. Bei TBitmap32 ist Canvas allerdings für den User transparent, d.h. Du kannst direkt MyBitmap.LineTo(X,Y) aufrufen. Zitat:
Hoffe das hilft mal etwas weiter ... :wink: |
Re: Bild um einen Bestimmten Winkel drehen
Du solltest entweder aufs Bitmap zeichnen, oder ein Bitmap im Speicher haben, und darauf Zeichnen, und in OnPaint oder so dieses dann auf die PaintBox z.B. zeichnen ;)
|
Re: Bild um einen Bestimmten Winkel drehen
Zitat:
Zitat:
GR32 Help TBitmap32.LineTo procedure LineToS(X, Y: Integer); procedure LineToTS(X, Y: Integer); procedure LineToAS(X, Y: Integer); procedure LineToXS(X, Y: TFixed); procedure LineToFS(X, Y: Single); procedure LineToXSP(X, Y: TFixed); procedure LineToFSP(X, Y: Single); |
Re: Bild um einen Bestimmten Winkel drehen
Hallo
Ich wollte die Komponenten von Graphic32 für die Entwicklungsumgebung registrieren. Leider schaffe ich das im Moment nicht. :wall: Habe gemäss Hilfe das Bibliotheksverzeichnis gesetzt und bin auf Komponente->Komponente installieren um entsprechendes Paket reinzuholen. Trotzdem werden mir die Icons in der Entwicklungsumgebung nicht angezeigt. Bin dankbar um jeden Tipp ... |
Re: Bild um einen Bestimmten Winkel drehen
Hast du auch das Design-Package ausgewählt, also z.B. GR32_DSGN_D7.dpk?
|
Re: Bild um einen Bestimmten Winkel drehen
Danke, hatte nur das Paket GR32_D7.dpk installiert. Nun klappt es! :dancer:
|
Re: Bild um einen Bestimmten Winkel drehen
am besten und ganz ohne extra Komponente geht's mit GDI+. Das ganze ist recht schlank und schnell:
![]() |
Re: Bild um einen Bestimmten Winkel drehen
Ich habe im Artikel nichts gefunden, kann GDI+
Und ich behaupte einfach mal, dass die GR32-Lib schneller als GDI ist :wink: . [add]Ups, langsam wirds etwas OT [/add] |
Re: Bild um einen Bestimmten Winkel drehen
Hallo,
Zitat:
Zitat:
Zitat:
Ich hab auf Basis von GDI+ eine ![]() Zitat:
Zitat:
Ich denke schon, dass MS hier hochoptimierte Routinen geschrieben hat, schliesslich läuft das ganze moderne XP-Zeug drauf (Transparenz, Schriftenglättung...). Gruß xaromz |
Re: Bild um einen Bestimmten Winkel drehen
Super :thumb: ! Bisher habe ich auf eine Umsetzung der GR32-Lib für .Net gewartet, bevor ich mich richtig mit C# beschäftige, aber jetzt muss ich mir wohl GDI mal genauer anschauen :wink: .
Zum Thema Geschwindigkeit: Ich bleibe bei meiner Behauptung :P . GR32 besteht aus sehr viel Assmebler, benutzt SSE und MMX, die Pixel können direkt über Pointer angesprochen werden, ... Das kann eigentlich nur noch mit Hardwarebeschleunigung schneller gehen. |
Re: Bild um einen Bestimmten Winkel drehen
Hallo Leute =)
Erstmal danke für die aktive Beantwortung meiner Fragen... Hab jetzt endgültig GR32 Komponente in mein Programm eingebaut und werde aus diesem Grund auch nicht auf PaintBox oder andere Komponente umsteigen. Jetzt zeichne ich direckt aufs Bitmap von Image32 bzw. einem Layer.. Und da kommt gleich das nächste Problem.
Delphi-Quellcode:
Wie ihr sehen könnt, erstellt die erste Prozedur ein Bitmap auf der Komponente.
procedure TForm1.Button1Click(Sender: TObject);
begin with Img do begin Layers.Clear; Scale := 1; Bitmap.SetSize(150, 150); Bitmap.Clear(clGreen32); end; end; procedure TForm1.Button2Click(Sender: TObject); var BL: TBitmapLayer; begin BL := TBitmapLayer(Img.Layers.Add(TBitmapLayer)); with BL.Bitmap do begin bl.Bitmap.SetSize(150,150); bl.Bitmap.DrawMode := dmBlend; PenColor:= clRed32; MoveTo(3,3); LineToS(150,150); Bl.Scaled:= true; end; end; Die zweite Prozedur ist dafür zuständig, dass ein Layer erstellt und gezeichnet wird. Eigentlich ist die Größe des Image32.Bitmaps und des Layers gleich, trotzdem wird das Bitmap vom Layer kleiner gezeichnet, und zwar so: ![]() obwohl die Linie bis ganz unten rechts gehen sollte... Was mache ich falsch? |
Re: Bild um einen Bestimmten Winkel drehen
wenn man nur ein Bild drehen will kann man auf externe Sachen wie Graphic32 verzichten.
Infos und Copy&Paste Lösung: ![]() |
Re: Bild um einen Bestimmten Winkel drehen
@nano:
Delphi-Quellcode:
@Gandalfus: Hast du dir die Exe überhaupt angeschaut? Du musst doch zugeben, dass das Ergebnis ohne AntiAliasing o.Ä. ziemlich ... bescheiden aussieht.
Bl.Location := FloatRect(0, 0, 150, 150);
|
Re: Bild um einen Bestimmten Winkel drehen
|
Re: Bild um einen Bestimmten Winkel drehen
Wo denn?
|
Re: Bild um einen Bestimmten Winkel drehen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Re: Bild um einen Bestimmten Winkel drehen
Irgendwie scheint mir, dass die Linie nicht mit AntiAliasing gezeichnet wird... außerdem geht sie nicht auf das Pixel ganz im Eck, sondern auf das Pixel darüber...
|
Re: Bild um einen Bestimmten Winkel drehen
Naja, das dürfte eine "normale" Ungenauigkeit sein. Ich denke mal, da hier mit Pixeln gerechnet wird und es nunmal keine Halben/dreiviertelten etc Pixel gibt, kann sowas schonmal vorkommen.
Man liest sich, Stanlay :hi: |
Re: Bild um einen Bestimmten Winkel drehen
Aja, an die Kommas habe ich nicht gedacht, ich habe bis jetzt immer nur mit ganzen Pixeln gearbeitet...
|
Re: Bild um einen Bestimmten Winkel drehen
Khabarakh hat folgendes geschrieben:
Zitat:
![]() |
Re: Bild um einen Bestimmten Winkel drehen
Die Linie wurde ohne AntiAliasing gezeichnet =)
Sogar die stinknormale TImage Komponente zeichnet eine Linie von 0,0 zu 150,150 gerade. Da können bei der Berechnung nun wirklich nicht Knicke entstehen =) |
Re: Bild um einen Bestimmten Winkel drehen
www.graphics32.org What's new in version 1.8? [...] Bugfixes:
Nutzt du noch 1.7? Mit Line geht es aber auf jeden Fall. |
Re: Bild um einen Bestimmten Winkel drehen
kann ich das einfach so updaten, ohne Komponente auf der Form zu ersetzen?
|
Re: Bild um einen Bestimmten Winkel drehen
Sollte schon gehen, einfach nochmal das Package installieren.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:44 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