Link to home
Start Free TrialLog in
Avatar of enrique_mp
enrique_mp

asked on

Convert a MetafilePict recovered from Clipboard to a System.Drawing.Image

I need to recover an imagen that y paste from Photoshop for asign it to a PictureBox.Image.

The problem that I have is that the function Clipboard.GetDataObject().GetFormats() returns that the clipboard's data is in DataFormats.MetafilePict format and only in this format, don't support any conversion.

I tried to recover the image with this code:

  if ( Clipboard.GetDataObject().GetDataPresent(DataFormats.MetafilePict ) )
      object o= Clipboard.GetDataObject().GetData(DataFormats.MetafilePict);            

the condition is evaluated to true but the object o is assigned to null.


Anybody can help me.

Sorry for my english.

Avatar of caner_elci
caner_elci

I tried the following code with Photoshop and it worked well:

if( Clipboard.GetDataObject().GetDataPresent( DataFormats.Bitmap ) )
{
      object o = null;
      o = Clipboard.GetDataObject().GetData( DataFormats.Bitmap );
      pictureBox1.Image = (Image)o;
}
try this..example code

// if you have any imageobject its ok. but make sure types are compatible which highly matters
Bitmap imageObject = (Bitmap)Image.FromFile(@"C:\Documents and Settings\Administrator\My Documents\My Pictures\man2.gif");

Clipboard.SetDataObject(imageObject,false); // it won't remain on clipboard after application exists
IDataObject iData = Clipboard.GetDataObject(); // get the interface object
bool bDataPresent = iData.GetDataPresent(DataFormats.Bitmap); // check whether data is present

// following is just for reference
System.Drawing.Imaging.BitmapData meta = (System.Drawing.Imaging.BitmapData)iData.GetData(DataFormats.MetafilePict);
// you can use meta on Picture or any other objects , just for reference here.

if ( bDataPresent )
richTextBox1.Paste(DataFormats.GetFormat(DataFormats.Bitmap));

R.K
You may want to try using the type rather than the data format name. I'm
not sure why, but this seemed to work more reliably for me than using the
formats. The following works when I copy a picture from PowerPoint

Dim objData As DataObject = Clipboard.GetDataObject()

If objData.GetDataPresent(GetType(System.Drawing.Bitmap)) Then
Dim bmp As System.Drawing.Bitmap =
CType(objData.GetData(GetType(System.Drawing.Bitmap)),
System.Drawing.Bitmap)
End If

I'll have to do a little research to find out the prescribed way to convert
the MemoryStream from the clipboard to a MetaFile.


best of luck..

R.K
Avatar of enrique_mp

ASKER

Thanks for all comments. My problem was the size of the image. The size of the image that I was copy was too big and it sames that the clipboard don't store these datas correctly.

Thanks
ASKER CERTIFIED SOLUTION
Avatar of ee_ai_construct
ee_ai_construct
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial