C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: リッチテキストボックス上の画像の取得がうまくいかない


(過去ログ 104 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■62075 / inTopicNo.1)  リッチテキストボックス上の画像の取得がうまくいかない
  
□投稿者/ やんまー (92回)-(2011/09/20(Tue) 00:12:37)

分類:[VB.NET/VB2005 以降] 

恐れ入ります。
リッチテキストボックス上の画像を取得するために、クリップボードを使用する方法を、この掲示板で教えていただきました。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=61398&KLOG=103

で、うまくいったと思ったのですが、いろいろ試しているとうまくいかないパターンがあることがわかりました。
なぜか画像として取得できるパターンとできないパターンがあるのです。。。



一番初めに画像が一個あるとして

RichTextBox1.Select(0, 1)
If RichTextBox1.SelectionType = RichTextBoxSelectionTypes.Object Then
  RichTextBox1.Copy()
  img = Clipboard.GetImage()
  If img IsNot Nothing Then
    Debug.Print("画像追加") ・・・ @
  Else
    Debug.Print("画像じゃない?") ・・・ A
  End If
End If




上のようなコードで、
1.起動
2.ペイントで開いてあった画像をコピー
3.リッチテキストボックスに貼り付け
4.上記を実行

とすると、きちんと@に入り画像の取得ができています。imgをpictureboxに表示することもできます。

しかし・・・
上記3を
richTextBox1.SaveFile("tmp.rtf" , RichTextBoxStreamType.RichText)
で保存し、一度閉じた後起動し
richTextBox1.LoadFile("tmp.rtf" , RichTextBoxStreamType.RichText)
で読み出して、
4.上記を実行
すると、なぜかAの方にいきます。

これはどういうことなのでしょうか・・・

引用返信 編集キー/
■62078 / inTopicNo.2)  Re[1]: リッチテキストボックス上の画像の取得がうまくいかない
□投稿者/ Hongliang (805回)-(2011/09/20(Tue) 10:44:36)
RTF 上では画像は EMF 形式で扱われるため、一旦 RTF で保存した後は Bitmap オブジェクトとしては取得できません。
// クリップボードにあるオブジェクトがどんな形式をサポートしているかは、Clipboard.GetDataObject() で取得できる IDataObject の GetFormats() メソッドで確認できます。
EMF データを取得するには、たとえばこんな方法があるようです。
http://dobon.net/vb/dotnet/graphics/getclipboardmetafile.html
引用返信 編集キー/
■62081 / inTopicNo.3)  Re[2]: リッチテキストボックス上の画像の取得がうまくいかない
□投稿者/ やんまー (93回)-(2011/09/20(Tue) 15:08:24)
Hongliang さん

ご回答畏れ入ります。


まず、教えていただいたページの方法で、WORD2003上でコピーした画像をちゃんと取得できる事がわかりました。
(ただし、僕が質問文に書いた方法でもOKでした・・・)


しかし、気を取り直して、Richtextbox上からコピーして試すと・・・ダメです。。。
一体何が起きているのか・・・?!

クリップブックでもちゃんと画像がコピーされている状況が見えますし、
ペイント、Jtrimなどへの貼付けも成功します。

しかし・・・質問文のコードはAにいきます。


参考URLから以下のようにするとCにいきます・・・


		Dim data As IDataObject = Clipboard.GetDataObject()
		'クリップボードにデータがあるか調べる
		If data IsNot Nothing Then
			'PNG形式でデータをMemoryStreamとして取得する
			Dim ms As System.IO.MemoryStream = _
				DirectCast(data.GetData("PNG"), System.IO.MemoryStream)
			If Not ms Is Nothing Then
				Debug.Print("get image! 2") ・・・ B
			Else
				Debug.Print("not image. 2") ・・・ C
			End If
		End If


あと、GetFormats()で確認しますとSystem.String[]とでます。
というかSystem.String[]しかでません・・・画像をコピーしていてもです。

↓のようにしています。
Debug.Print(Clipboard.GetDataObject().GetFormats.tostring)


困りました・・・

引用返信 編集キー/
■62082 / inTopicNo.4)  Re[2]: リッチテキストボックス上の画像の取得がうまくいかない
□投稿者/ やんまー (94回)-(2011/09/20(Tue) 15:18:46)
2011/09/20(Tue) 15:21:23 編集(投稿者)
2011/09/20(Tue) 15:21:21 編集(投稿者)

Hongliang さん

> // クリップボードにあるオブジェクトがどんな形式をサポートしているかは、Clipboard.GetDataObject() で取得できる IDataObject の GetFormats() メソッドで確認できます。


失礼しました。取得仕方が間違っていました。以下のようになりました。


Richtextboxの画像情報がなさげですね・・・
”MetaFilePict”というのがそうなんでしょうか・・・?




----------
jtrimから
----------
DeviceIndependentBitmap
System.Drawing.Bitmap
Bitmap
Format17


------------------
word2003から
------------------
Object Descriptor
Rich Text Format
HTML Format
EnhancedMetafile
MetaFilePict
PNG
GIF
JFIF
PNG+Office Art
GIF+Office Art
JFIF+Office Art
Office Drawing Shape Format
ActiveClipBoard
DeviceIndependentBitmap
System.Drawing.Bitmap
Bitmap
Embed Source
Link Source
Link Source Descriptor
ObjectLink
Hyperlink




----------------
Richtextboxから
----------------
MetaFilePict
Embedded Object
Object Descriptor
Rich Text Format
Rich Text Format Without Objects
RTF in UTF8
RTF with NCRs for nonASCII


引用返信 編集キー/
■62083 / inTopicNo.5)  Re[3]: リッチテキストボックス上の画像の取得がうまくいかない
□投稿者/ やんまー (95回)-(2011/09/20(Tue) 15:42:29)
ああああ
失礼しました。

Dim ms As System.IO.MemoryStream = _
DirectCast(data.GetData("MetaFilePict"), System.IO.MemoryStream)
ですね!

上手く行きそうです。頑張ります!
引用返信 編集キー/
■62088 / inTopicNo.6)  Re[4]: リッチテキストボックス上の画像の取得がうまくいかない
□投稿者/ やんまー (96回)-(2011/09/21(Wed) 01:59:48)
残念。
うまくいきませんでした。

ちょっと質問の内容が変わってきてしまったので再質問させてください。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -