Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bild um einen Bestimmten Winkel drehen (https://www.delphipraxis.net/52019-bild-um-einen-bestimmten-winkel-drehen.html)

jfheins 26. Aug 2005 18:24

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 ;)

Khabarakh 26. Aug 2005 18:29

Re: Bild um einen Bestimmten Winkel drehen
 
Zitat:

2. Wohin soll man am besten Zeichnen? Aufs Canvas oder Bitmap direkt?
Das Standardverfahren ist eigentlich die OffScreenBitmap-Methode, d.h. ein Bitmap wird im Speicher gehalten und im OnPaint auf die Paintbox kopiert. Mit der GR32-Lib wird aus diesem Soll ein Muss, da nur TBitmap32 die erweiterten Funktionen eben jener bietet. Man kann auch direkt auf den Buffer von TPaintbox32 zeichnen und diesen dann mit TPaintbox32.Flush anzeigen lassen.
Zitat:

3. Image32.Bitmap.LineTo verlangt nun nach einem neuen Parameter vom typ HDC, was ist das überhaupt? (OnlineHilfe hat mich nicht schlauer gemacht :-/)
Irgendetwas machst du falsch :gruebel: :
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);


Bitmap 27. Aug 2005 07:33

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

Khabarakh 27. Aug 2005 08:12

Re: Bild um einen Bestimmten Winkel drehen
 
Hast du auch das Design-Package ausgewählt, also z.B. GR32_DSGN_D7.dpk?

Bitmap 27. Aug 2005 09:10

Re: Bild um einen Bestimmten Winkel drehen
 
Danke, hatte nur das Paket GR32_D7.dpk installiert. Nun klappt es! :dancer:

MarcoWarm 27. Aug 2005 09:52

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:

http://www.delphi-forum.de/topic_GDI...455e9f5f4b26cc

Khabarakh 27. Aug 2005 10:42

Re: Bild um einen Bestimmten Winkel drehen
 
Ich habe im Artikel nichts gefunden, kann GDI+
  • Mit Fließkommakoordinaten umgehen (+Anti-Aliasing)?
  • Bitmaps unter Berücksichtigung der Alphakanäle zusamenfügen?
  • Mit Layern umgehen (wichtig: Repaint-Optimisierungen)?
  • PNGs mit Alphakanal abspeichern?
Das wären für mich wichtige Punkte, die ich oft benutze.
Und ich behaupte einfach mal, dass die GR32-Lib schneller als GDI ist :wink: .

[add]Ups, langsam wirds etwas OT [/add]

xaromz 27. Aug 2005 11:20

Re: Bild um einen Bestimmten Winkel drehen
 
Hallo,

Zitat:

Zitat von Khabarakh
Ich habe im Artikel nichts gefunden, kann GDI+
  • Mit Fließkommakoordinaten umgehen (+Anti-Aliasing)?

GDI+ kann (eigentlich) nur Fließkomma.
Zitat:

Zitat von Khabarakh
  • Bitmaps unter Berücksichtigung der Alphakanäle zusamenfügen?

GDI+ hat immer einen Alphakanal. Also ja.
Zitat:

Zitat von Khabarakh

Sowas kann GDI+ nicht, lässt sich aber schnell selbst basteln (mehrere Graphikobjekte nehmen und übereinander zeichnen). Optimierungen gibt's da leider keine, aber das kann man sich ja auch selbst basteln, wenn's unbedingt nötig ist.
Ich hab auf Basis von GDI+ eine SVG-Komponente gebastelt. Die zeichnet jeden Layer einzeln über die vorherigen. Ab einer gewissen Größe wird das natürlich etwas langsamer, aber für den Hausgebrauch reicht's.
Zitat:

Zitat von Khabarakh
  • PNGs mit Alphakanal abspeichern?

Laden und anzeigen funktioniert, speichern sollte auch gehen (hab ich nicht ausprobiert).
Zitat:

Zitat von Khabarakh
Das wären für mich wichtige Punkte, die ich oft benutze.
Und ich behaupte einfach mal, dass die GR32-Lib schneller als GDI ist :wink: .

Wir sprechen hier von GDI+. Ist zwar nicht hardwarebeschleunigt (wollte MS mal machen, aber jetzt kommt ja Avalon).
Ich denke schon, dass MS hier hochoptimierte Routinen geschrieben hat, schliesslich läuft das ganze moderne XP-Zeug drauf (Transparenz, Schriftenglättung...).

Gruß
xaromz

Khabarakh 27. Aug 2005 12:33

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.

nano 28. Aug 2005 11:52

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:
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;
Wie ihr sehen könnt, erstellt die erste Prozedur ein Bitmap auf der Komponente.
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:
http://inflicted.de/tmp/delphi.gif



obwohl die Linie bis ganz unten rechts gehen sollte...

Was mache ich falsch?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:26 Uhr.
Seite 2 von 4     12 34      

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