TMetaFile (WMF) -> JPG yapabilen var mı (Ama 1 şartla !)?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

TMetaFile (WMF) -> JPG yapabilen var mı (Ama 1 şartla !)?

Mesaj gönderen mrmarman »

- Problemimi çözdüğümü sanıyordum ama yanılmışım. :(

- HDD'de bulunan 2000 adet WMF dosyasını okuyup, Width x Height değerlerini alıp JPG yaparak HDD'ye kopyalamak istiyorum.

- Standart yollarla bu yapıldığında 100 kadar WMF sonra hafızadan yemeye başlıyor ve bir süre sonra da System Kaynakları yetmedi deyip program kırılıyor. (Memory Leak) Bunu çözmüş birisi varsa helal olsun diyorum.

Bu durum Windows'un rapor edilmiş buglarında biri olduğundan alternatif yollar bilen varsa paylaşırsa sevinirim.

- ACDsee programı bu işi mükemmel yapıyor ki bunun bir yolu olduğunun göstergesi. (Ama ne olur WMF'yi Binary olarak okuyup parse edip çözümlediğin çizimleri canvas üzerine kendin yap demeyin :o) )

- Kullandığım örnek routinler aşağıdaki gibi. İçinden WMF çıkarılırsa sistemde herhangi bir yüklenme olmuyor, WMF işin içine girince olanlar oluyor.

- WMF zorunluluğu olmasaydı da sizi bunlarla yormasaydım ama, mevcut proje WMF katalog sistemi olunca dediğim gibi 100 kadar WMF sonra sistem kaynakları azalmaya başlıyor ve bir süre sonra da tükeniyor.

- Problemim bu tükenmeyi bertaraf edememek.

Kod: Tümünü seç

Procedure TForm1.WMFdenJPG(Kaynak, Hedef:String);
Var
  JPGDosya : TjpegImage;
  BMPDosya : TBitmap;
  WMFDosya : TMetaFile;
begin
  If FileExists(Kaynak) then
  begin
    WMFDosya := TMetaFile.Create;
    WMFDosya.LoadFromFile(Kaynak);
    BMPDosya := TBitmap.Create;
    BMPDosya.Width  := WMFDosya.Width;
    BMPDosya.Height := WMFDosya.Height;
    BMPDosya.Canvas.Draw(0,0,WMFDosya);
    JPGDosya := TjpegImage.Create;
    JPGDosya.Assign(BMPDosya);
    JPGDosya.SaveToFile(Hedef);
    JPGDosya.Free;
    BMPDosya.Free;
    WMFDosya.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  WMFdenJPG('C:\0.WMF', 'C:\0.JPG');
end;
- Bunu başarabilmiş kimse var mı ? Lütfen cevap yazın...

- Ref. Kaynak Ölçer programı.

- Konu ile ilgili Microsoft sayfası :

Microsoft Knowledge Base Article - 257523---------------------------------------------
BUG: Resource Leak Occurs When You Display WMF Files in a PictureBox
----
http://support.microsoft.com/default.as ... -us;257523
Resim
Resim ....Resim
Cevapla