Изменение цвета файла .emf в C#
Привет,
Я пытаюсь изменить цвет существующего файла метафайла(.emf) с моей машины и сохранить его как еще одну измененную копию. Я могу визуализировать метафайл времени выполнения в форме windows, но не смог сохранить его на своей машине.
Я приложил свой код ниже и был бы признателен, если бы кто-нибудь мог помочь.
Что я уже пробовал:
[DllImport("gdi32.dll")] static extern IntPtr CopyEnhMetaFile( // Copy EMF to file IntPtr hemfSrc, // Handle to EMF String lpszFile // File ); [DllImport("gdi32.dll")] static extern int DeleteEnhMetaFile( // Delete EMF IntPtr hemf // Handle to EMF ); [DllImport("gdi32.dll")] static extern uint GetEnhMetaFileBits(IntPtr hemf, uint cbBuffer, [Out] byte[] lpbBuffer); private void PicModified_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; float[][] matrixColTrans = { new float[] {0, 0, 0, 0, 0} , new float[] {0, 0, 0, 0, 0} , new float[] {0, 0, 0, 0, 0} , new float[] {0, 204, 0, 1, 0} , new float[] {0, 0, 0, 0, 0} }; ColorMatrix colorMatrix = new ColorMatrix(matrixColTrans); ImageAttributes ia = new ImageAttributes(); ia.SetColorMatrix(colorMatrix); if (txtSelectEMFFilePath.Text.EndsWith(".emf")) { string destFileName = txtSelectEMFFilePath.Text; Metafile mf = new Metafile(destFileName); g.DrawImage( mf , new Rectangle(0, 0, picModified.Width, picModified.Height)// destination rectangle , 0, 0 // upper-left corner of source rectangle , mf.PhysicalDimension.Width // width of source rectangle , mf.PhysicalDimension.Height // height of source rectangle , GraphicsUnit.Pixel , ia ); // Save it as a metafile IntPtr iptrMetafileHandle = mf.GetHenhmetafile(); // Export metafile to an image file IntPtr iptrMetafileHandleCopy = CopyEnhMetaFile(iptrMetafileHandle, "image.emf"); //Binding Output file Image newimg = new Metafile("image.emf"); imgOut.Image = newimg; imgOut.SizeMode = PictureBoxSizeMode.Zoom; //// Delete the metafile from memory DeleteEnhMetaFile(iptrMetafileHandle); DeleteEnhMetaFile(iptrMetafileHandleCopy); mf.Dispose(); //1. End } }