DOBON.NET DOBON.NETプログラミング掲示板過去ログ

クリップボードからの画像の取り込みについて

分類:[.NET]

はじめまして。
いろいろ調べてみたのですが、どうしてもわかりません。
どなたか教えていただけないでしょうか。

あらかじめクリップボードに取り込んであるメタファイル(具体的には、Officeなどで作成した画像)をjpegファイルとして保存するようにしたいのですが、うまく動いてくれません。(Visual Basic .netで作成しています)
下のようなプログラムで、データ形式が"bitmap"や"DIB"であれば問題なく動作するですが、メタファイルではダメなようです。
どうも、メタファイルだとクリップボードからの画像の取り込みがうまくいっていないのではないかと思うのですが・・・・
(ためしにピクチャーボックスに表示してみたりしたですが、bitmapだと表示されるのですがメタファイルでは何も表示されないのです)
なぜメタファイルだと動作しないのでしょうか。

宜しくお願いします。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim myImage As System.Drawing.Image
Dim opfn As String
myImage = Nothing

FileOpen(1, "d:\test.txt", OpenMode.Input)
opfn = LineInput(1)
FileClose(1)

' Declares an IDataObject to hold the data returned from the clipboard.
' Retrieves the data from the clipboard.
Dim iData As IDataObject = Clipboard.GetDataObject()

' Determines whether the data is in a format you can use.
If iData.GetDataPresent(DataFormats.Bitmap) Then
MessageBox.Show("Bitmap")
myImage = System.Windows.Forms.Clipboard.GetDataObject.GetData(System.Windows.Forms.DataFormats.Bitmap)
ElseIf iData.GetDataPresent(DataFormats.EnhancedMetafile) Then
MessageBox.Show("EnhancedMetafile")
myImage = System.Windows.Forms.Clipboard.GetDataObject.GetData(System.Windows.Forms.DataFormats.EnhancedMetafile)
Else
MessageBox.Show("another type")
End If

myImage.Save(opfn, System.Drawing.Imaging.ImageFormat.Jpeg)
End Sub
こんにちは、わんこさん。ピラルクです。

メタファイルObjectをGetFormats()で見ると
  Office Drawing Shape Format
  MetaFilePict
  EnhancedMetafile
  PNG+Office Art
  JFIF+Office Art
  GIF+Office Art
  PNG
  JFIF
  GIF
  ActiveClipboard
  HTML Format
の11Typeが取れました。
返ってくる型はMemoryStreamで返されるようです。

で、以下のようにすると、少なくともShape図形のような
メタファイルはjpgで出力できました。

  ElseIf iData.GetDataPresent(DataFormats.EnhancedMetafile) Then
    MessageBox.Show("EnhancedMetafile")
    Dim mem As System.IO.MemoryStream
    mem = System.Windows.Forms.Clipboard.GetDataObject.GetData("JFIF")
    myImage = New Bitmap(mem)
  Else

  ……
  myImage.Save("test.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)

メタファイルの種類によっては、ダメなやつもあると思
われるので、何をサポートするのか決める必要があるの
では?

(詳細は私もよくわかっていないので参考程度に... (^^;)
ありがとうございます!!

早速試してみます。

また結果出たら報告にきますね。
結果のご報告!!

できました!!
うまく表示されないものもありましたが、なんとか表示するようにできました!

ありがとうございました!!
チェック付け忘れました・・・・
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板