從here:
當您使用Save方法一 圖形圖像保存爲Windows圖元文件 格式(WMF)或增強型圖元文件 格式(EMF)文件,生成的文件 保存作爲便攜式網絡 圖形(PNG)文件。因爲.NET Framework的GDI + 組件的確如此 行爲發生 沒有編碼器,您可以使用 將文件保存爲.wmf或.emf文件。
但我猜你已經有了那麼遠:)
Here有人把一個位圖一個FileStream。
metafileStream = MakeMetafileStream(gdiBitmap);
與MakeMetafileStream()是:
private static MemoryStream MakeMetafileStream(Bitmap image)
{
Graphics graphics = null;
Metafile metafile= null;
var stream = new MemoryStream();
try
{
using (graphics = Graphics.FromImage(image))
{
var hdc = graphics.GetHdc();
metafile= new Metafile(stream, hdc);
graphics.ReleaseHdc(hdc);
}
using (graphics = Graphics.FromImage(metafile))
{ graphics.DrawImage(image, 0, 0); }
}
finally
{
if (graphics != null)
{ graphics.Dispose(); }
if (metafile!= null)
{ metafile.Dispose(); }
}
return stream;
}
有趣的東西。 但至於編碼器的事...
Here從MS黃文雄登載非託管方法:
[DllImport("gdiplus.dll")]
private static extern uint GdipEmfToWmfBits (IntPtr _hEmf, uint _bufferSize,
byte[] _buffer, int _mappingMode, EmfToWmfBitsFlags _flags);
[DllImport("gdi32.dll")]
private static extern IntPtr SetMetaFileBitsEx (uint _bufferSize,
byte[] _buffer);
[DllImport("gdi32.dll")]
private static extern IntPtr CopyMetaFile (IntPtr hWmf,
string filename);
[DllImport("gdi32.dll")]
private static extern bool DeleteMetaFile (IntPtr hWmf);
[DllImport("gdi32.dll")]
private static extern bool DeleteEnhMetaFile (IntPtr hEmf);
private void button4_Click(object sender, System.EventArgs e)
{
Graphics g= this.CreateGraphics();
IntPtr hDC = g.GetHdc();
Metafile mf = new Metafile(hDC,EmfType.EmfOnly);
g.ReleaseHdc(hDC);
g.Dispose();
g=Graphics.FromImage(mf);
//Pen p = new Pen(Color.White,5);
g.DrawArc(Pens.Black,0,0,200,200,0,360);
//g.DrawImage(Bitmap.FromFile(@"c:\temp\test.bmp"),0,0);
g.Dispose();
IntPtr _hEmf= mf.GetHenhmetafile();
uint _bufferSize = GdipEmfToWmfBits(_hEmf, 0, null, MM_ANISOTROPIC,
EmfToWmfBitsFlags.EmfToWmfBitsFlagsDefault);
byte[] _buffer = new byte[_bufferSize];
GdipEmfToWmfBits(_hEmf, _bufferSize, _buffer, MM_ANISOTROPIC,
EmfToWmfBitsFlags.EmfToWmfBitsFlagsDefault);
IntPtr hmf = SetMetaFileBitsEx(_bufferSize, _buffer);
CopyMetaFile(hmf, "C:\\ConvertedMetafile.wmf");
DeleteMetaFile(hmf);
DeleteEnhMetaFile(_hEmf);
}
希望這會讓你那裏:)
非常感謝您對這些鏈接,遺憾的是它並沒有我的情況下工作了... – jdehaan 2011-03-11 12:33:41
好像WMF是「無論如何,在它的出路上。也許這是你爲什麼必須切換到另一種格式的理由? :p – 2011-03-11 13:02:21
是的,我真的不喜歡那些廢話的東西,相信我......我只需要用數據餵養一個老式的工具,它對於支持的格式非常不情願。 – jdehaan 2011-03-11 17:28:38