Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2267
  • Last Modified:

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.

0
enrique_mp
Asked:
enrique_mp
1 Solution
 
caner_elciCommented:
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;
}
0
 
rama_krishna580Commented:
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
0
 
rama_krishna580Commented:
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
0
 
enrique_mpAuthor Commented:
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
0
 
ee_ai_constructCommented:
PAQed, with points refunded (500)
ee_ai_construct - CS Mod
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now