Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   "MetaFile.Scanline" (https://www.delphipraxis.net/178947-metafile-scanline.html)

Bjoerk 5. Feb 2014 11:15

"MetaFile.Scanline"
 
Weiß jemand, ob es etwas Vergleichbares wie Scanline für Metafiles gibt?

sx2008 5. Feb 2014 11:32

AW: "MetaFile.Scanline"
 
Ein Metafile ist eine gespeicherte Abfolge von Windows GDI Aufrufen die man später wieder abspielen kann.
Um effizient auf Pixelebene zugreifen zu können musst du es in ein Bitmap zeichen.
Delphi-Quellcode:
bitmap.Canvas.Draw(0,0, metafile);

Bjoerk 5. Feb 2014 13:02

AW: "MetaFile.Scanline"
 
OK. Thanx. Dann ist das Hin und Rückspeichern in eine Bitmap wohl nicht zu umgehen.

BTW, in verschieden Threads wird darauf hingewiesen, daß die rgb bei Scanline anders rum sind als bei einer Bitmap. Bei einer 32 Bit Bitmap (also PixelFormat pf32bit) konnte ich das bis jetzt nicht feststellen. Wurde das seitens Delphi mal geändert oder mach ich was falsch?
Delphi-Quellcode:
function RGB32ToColor(Value: TRGB32): TColor;
begin
  Result := ColorToRGB(RGB(Value.R, Value.G, Value.B));
end;

function ColorToRGB32(Value: TColor): TRGB32;
begin
  Result.R := GetRValue(ColorToRGB(Value));
  Result.G := GetGValue(ColorToRGB(Value));
  Result.B := GetBValue(ColorToRGB(Value));
  Result.A := 0;
end;

Medium 5. Feb 2014 14:49

AW: "MetaFile.Scanline"
 
Wenn du die Funktionen so benutzt, merkst du das gar nicht. Intern sind 32 Bit Farbwerte (zumindest in der Windows GDI) im Format $xxBBGGRR gespeichert, auch wenn man von "RGB" spricht. Die Funktionen berücksichtigen dies aber schon.

Edit: Setze mal die Color-Eigenschaft eines Formulars auf $00FF0000 -> Blau, nicht Rot.

himitsu 5. Feb 2014 15:19

AW: "MetaFile.Scanline"
 
Als Bytes interpretiert steht da aber auch wieder
Delphi-Quellcode:
RR GG BB xx
im Speicher.

Zitat:

OK. Thanx. Dann ist das Hin und Rückspeichern in eine Bitmap wohl nicht zu umgehen.
Metafile in Bitmap geht ja noch,
aber bei Bitmap in Metafile wird es schwer bis nahezu unmöglich.

Bjoerk 5. Feb 2014 15:23

AW: "MetaFile.Scanline"
 
Ja, da zerstört man sich dann die Vektorgrafik.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:41 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 by Thomas Breitkreuz