Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Bitmap in TMetafile ausgeben Windows 7 (https://www.delphipraxis.net/167804-bitmap-tmetafile-ausgeben-windows-7-a.html)

rweinzierl 19. Apr 2012 15:57


Bitmap in TMetafile ausgeben Windows 7
 
Hallo

Ich verwende diesen Code, unter Windwos XP funktioniert es einwandfrei bei Windows 7 ist die metafile- Datei nicht korrekt.

Am Bildschirm wird sauber das Bitmap ausgegeben, in der wmf Datei sieht man nur die Linie.

(Ich habs mit emf probiert da sieht es besser aus, weis jemand warum ?)

Delphi-Quellcode:
var MyMetafile : TMetafile;
Bitmap : TBitmap;
myc : TMetafileCanvas ;
begin
MyMetafile := TMetafile.Create;
Bitmap := TBitmap.create;
Bitmap.LoadFromFile('test.bmp');

myc := TMetafileCanvas.Create(MyMetafile, 0);
myc.LineTo(100, 100);
myc.Draw(0, 0, Bitmap);
myc.Free;

MyMetafile.SaveToFile('c:\temp\mist.wmf');
self.Canvas.StretchDraw(rect(0,0,MyMetafile.Width,MyMetafile.Height),MyMetafile);
Bitmap.free;
MyMetafile.free;
mfg

Reinhold

roga 20. Apr 2012 04:26

AW: Bitmap in TMetafile ausgeben Windows 7
 
Wieso StretchDraw? Was soll hier gestretcht werden?

Sir Rufo 20. Apr 2012 05:48

AW: Bitmap in TMetafile ausgeben Windows 7
 
Zitat:

Zitat von roga (Beitrag 1162752)
Wieso StretchDraw? Was soll hier gestretcht werden?

Das ist doch nur zur Kontrolle des Metafiles am Bildschirm.

Aber warum keine Delphi-Tags benutzt?

rweinzierl 20. Apr 2012 06:52

AW: Bitmap in TMetafile ausgeben Windows 7
 
Hallo



Zitat:

Aber warum keine Delphi-Tags benutzt?

Diesen Hinweis verstehe ich nicht ganz, was kann ich anders oder besser machen?
Ich verwende die wmf Datei dann später weiter und so ist diese nicht zu gebrauchen.


mfg

Reinhold

mkinzler 20. Apr 2012 07:02

AW: Bitmap in TMetafile ausgeben Windows 7
 
Zitat:

Zitat von rweinzierl (Beitrag 1162763)
Hallo



Zitat:

Aber warum keine Delphi-Tags benutzt?

Diesen Hinweis verstehe ich nicht ganz, was kann ich anders oder besser machen?
Ich verwende die wmf Datei dann später weiter und so ist diese nicht zu gebrauchen.


mfg

Reinhold

Er meint die Codeformatierung hier im Forum. Einfach Code markieren und oben das Delphi-Icon anklicken

DeddyH 20. Apr 2012 07:20

AW: Bitmap in TMetafile ausgeben Windows 7
 
Oder zur Not händisch mit
Code:
[delphi]Code[/delphi]

freeway 20. Apr 2012 19:36

AW: Bitmap in TMetafile ausgeben Windows 7
 
ich hab mal deinen Code kopiert und ihn so laufen lassen, unter WIN7, das dabei erzeugte WMF entspricht exakt dem BMP
vielleicht hilft dir diese kleine Änderung

Delphi-Quellcode:
var MyMetafile : TMetafile;
Bitmap : TBitmap;
myc : TMetafileCanvas ;

begin
MyMetafile := TMetafile.Create;
Bitmap := TBitmap.create;
Bitmap.LoadFromFile('test.bmp');

myc := TMetafileCanvas.Create(MyMetafile, 0);
myc.Height := Bitmap.Height;
myc.Width := Bitmap.Width;
myc.Draw(0, 0, Bitmap);
myc.Free;

MyMetafile.SaveToFile('c:\temp\mist.wmf');
self.Canvas.StretchDraw(rect(0,0,100,100),MyMetafile);
Bitmap.free;
MyMetafile.free;

rweinzierl 22. Apr 2012 07:06

AW: Bitmap in TMetafile ausgeben Windows 7
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo

Erst mal danke für das du es ausprobiert hast, aber Delphi akteptiert den Code so nicht, TMetafileCanvas akzeptiert kein Height.

Ich habe die gleiche Exe mit dem gleichen Bitmap (nur 1 Pixel in Schwarz) auf einen XP und einen Windows7(32 Bit) laufen lassen und die wmf Dateien im Hex Editor verglichen ==> Da sind mehr Unterschiede als ich erwartet habe.(siehe Anhang). (MSPaint zeigt bei der xp Version das eine Pixel einwandfrei an bei der win7 version nicht)

Ich verstehe erlich gesagt die Welt nicht mehr, habe im Internet niemanden mit dem gleichen Problem gefunden. Ich dachte das sei eine Grundfunktion von Delphi/Windows und sollte funktioniern.

Ich habe mir auch die Spezikation der WMF Datei geladen aber da stöße ich an meine Grenzen.

mfg

Reinhold


Zitat:

Zitat von freeway (Beitrag 1162897)
ich hab mal deinen Code kopiert und ihn so laufen lassen, unter WIN7, das dabei erzeugte WMF entspricht exakt dem BMP
vielleicht hilft dir diese kleine Änderung

Delphi-Quellcode:
myc.Height := Bitmap.Height;
myc.Width := Bitmap.Width;


Bummi 22. Apr 2012 07:24

AW: Bitmap in TMetafile ausgeben Windows 7
 
Liste der Anhänge anzeigen (Anzahl: 1)
folgender Code liefert bei mir unter WIN7 D2010 das erwartete Ergebnis
Delphi-Quellcode:
var
  MyMetafile: TMetafile;
  Bitmap: TBitmap;
  myc: TMetafileCanvas;

begin
  MyMetafile := TMetafile.Create;
  Bitmap := TBitmap.Create;
  try
    MyMetafile.Width := 200;
    MyMetafile.Height := 200;
    Bitmap.Width := 100;
    Bitmap.Height := 100;
    Bitmap.Canvas.pen.Color := clRed;
    Bitmap.Canvas.pen.Width := 2;
    Bitmap.Canvas.Ellipse(0, 0, 99, 99);
    Bitmap.PixelFormat := pf32bit;
    myc := TMetafileCanvas.Create(MyMetafile, 0);
    try
      myc.pen.Color := clBlue;
      myc.Ellipse(0, 0, 199, 199);
      myc.Draw(0, 0, Bitmap);
    finally
      myc.Free;
    end;
    MyMetafile.SaveToFile('c:\temp\mist.wmf');
    self.Canvas.Draw(0, 0, MyMetafile);
  finally
    Bitmap.Free;
    MyMetafile.Free;

  end;

end;

freeway 22. Apr 2012 07:33

AW: Bitmap in TMetafile ausgeben Windows 7
 
da hab ich vertan mit myc und mymetafile, sorry

so sollte es sein
Delphi-Quellcode:
MyMetafile.Height := Bitmap.Height;
MyMetafile.Width := Bitmap.Width;

myc := TMetafileCanvas.Create(MyMetafile, 0);
zumindest funzt es bei mir so ohne Probleme


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:22 Uhr.
Seite 1 von 2  1 2      

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