我的代码如下:
if (!OpenClipboard(IntPtr.Zero))
return; IntPtr data = data = GetClipboardData((uint)CLIPFORMAT.CF_METAFILEPICT); if (data != IntPtr.Zero)
{
Graphics aa;
METAFILEPICT mfpStruct = (METAFILEPICT)Marshal.PtrToStructure(data, typeof(METAFILEPICT));
Metafile pMetaFile = new Metafile(mfpStruct.hMF, true);
}
CloseClipboard();不知道为什么,“Metafile pMetaFile = new Metafile(mfpStruct.hMF, true);”这句话总是报错,信息是“A generic error occurred in GDI+”,然后我又试了直接把data传入Metafile构造函数的第一个参数,可是还是报错,请教啊下面是上面用到的一些函数、结构的声明
#region win32 api声明
[DllImport("user32.dll")]
static extern bool OpenClipboard(IntPtr hWndNewOwner);
[DllImport("user32.dll")]
static extern bool CloseClipboard();
[DllImport("user32.dll")]
static extern IntPtr GetClipboardData(uint uFormat);
#endregion #region 剪切板格式
internal enum CLIPFORMAT : uint
{
CF_TEXT = 1,
CF_BITMAP = 2,
CF_METAFILEPICT = 3,
CF_SYLK = 4,
CF_DIF = 5,
CF_TIFF = 6,
CF_OEMTEXT = 7,
CF_DIB = 8,
CF_PALETTE = 9,
CF_PENDATA = 10,
CF_RIFF = 11,
CF_WAVE = 12,
CF_UNICODETEXT = 13,
CF_ENHMETAFILE = 14,
CF_HDROP = 15,
CF_LOCALE = 16,
CF_MAX = 17,
CF_OWNERDISPLAY = 0x80,
CF_DSPTEXT = 0x81,
CF_DSPBITMAP = 0x82,
CF_DSPMETAFILEPICT = 0x83,
CF_DSPENHMETAFILE = 0x8E,
}
#endregion #region 结构声明
public struct METAFILEPICT
{
public int mm;
public int xExt;
public int yExt;
public IntPtr hMF;
}
#endregion
if (!OpenClipboard(IntPtr.Zero))
return; IntPtr data = data = GetClipboardData((uint)CLIPFORMAT.CF_METAFILEPICT); if (data != IntPtr.Zero)
{
Graphics aa;
METAFILEPICT mfpStruct = (METAFILEPICT)Marshal.PtrToStructure(data, typeof(METAFILEPICT));
Metafile pMetaFile = new Metafile(mfpStruct.hMF, true);
}
CloseClipboard();不知道为什么,“Metafile pMetaFile = new Metafile(mfpStruct.hMF, true);”这句话总是报错,信息是“A generic error occurred in GDI+”,然后我又试了直接把data传入Metafile构造函数的第一个参数,可是还是报错,请教啊下面是上面用到的一些函数、结构的声明
#region win32 api声明
[DllImport("user32.dll")]
static extern bool OpenClipboard(IntPtr hWndNewOwner);
[DllImport("user32.dll")]
static extern bool CloseClipboard();
[DllImport("user32.dll")]
static extern IntPtr GetClipboardData(uint uFormat);
#endregion #region 剪切板格式
internal enum CLIPFORMAT : uint
{
CF_TEXT = 1,
CF_BITMAP = 2,
CF_METAFILEPICT = 3,
CF_SYLK = 4,
CF_DIF = 5,
CF_TIFF = 6,
CF_OEMTEXT = 7,
CF_DIB = 8,
CF_PALETTE = 9,
CF_PENDATA = 10,
CF_RIFF = 11,
CF_WAVE = 12,
CF_UNICODETEXT = 13,
CF_ENHMETAFILE = 14,
CF_HDROP = 15,
CF_LOCALE = 16,
CF_MAX = 17,
CF_OWNERDISPLAY = 0x80,
CF_DSPTEXT = 0x81,
CF_DSPBITMAP = 0x82,
CF_DSPMETAFILEPICT = 0x83,
CF_DSPENHMETAFILE = 0x8E,
}
#endregion #region 结构声明
public struct METAFILEPICT
{
public int mm;
public int xExt;
public int yExt;
public IntPtr hMF;
}
#endregion
IDataObject data = Clipboard.GetDataObject();object oimg = data.GetData( "GIF+Office Art" );
MemoryStream ms = oimg as MemoryStream;
Image img = null;
if( ms != null )
{
img = Image.FromStream( ms );
ms.Close();
}img.Save( "C:\\1.jpg" , ImageFormat.Jpeg );
IDataObject data = Clipboard.GetDataObject();object oimg = data.GetData( "GIF+Office Art" );
MemoryStream ms = oimg as MemoryStream;
Image img = null;
if( ms != null )
{
img = Image.FromStream( ms );
}img.Save( "C:\\1.jpg" , ImageFormat.Jpeg );
//最好判断一些是不是图片
if (iData.GetDataPresent(DataFormats.Bitmap))
{
Bitmap bit = (Bitmap)iData.GetData(DataFormats.Bitmap);
bit.Save(...)
}