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

クリップボードへの画像コピー

環境/言語:[windows2000, VB.NET Framework1.1]
分類:[.NET]

初心者の私にとってとても参考になるサイトで助かっています。
クリップボードへの画像コピーも参考にさせていただきました。
Clipboard.SetDataObject(bitmap変数)でコピーし、
他のアプリケーションファイル(powerpoint, word, paint等)へ
ペーストしたところ、バックの色が青になってしまいます。

ちなみに
graphic変数 = Graphics.FromImage(bitmap変数)
    graphic変数.drawEllipse(pen1, x1, y1, x2, y2)
のように書き出しています。
ボタンをクリックするとクリップボードへコピーされるように
なっています。
Clipboard.SetDataObject(graphic変数)とするとgraphic変数が
NULLというエラーになります。

クリップボードのバックを透明か白にするにはどうしたらよいでしょうか。
お教えください。
図を描く前にgraphic変数.Clear(Color.White)で
真っ白になります。Color.Whiteを他の色にかえればその色にも可能です。


Dim b = New Bitmap(400, 300) ’適当にサイズ指定
Dim g = Graphics.FromImage(b)

g.Clear(Color.White) ’こんな感じでいいと思います。
g.drawEllipse(Pens.Black, 10, 10, 50, 20)
Clipboard.SetDataObject(b)
■No4779に返信(テラオメガさんの記事)

すばやい回答をありがとうございました。
教えていただいた方法(graphic変数.Clear(Color.White))は
以前試しているのですが、作成しているプログラムの場合、
残念ながら使えないのです。説明不足ですみませんでした。

少しプログラムの説明をさせていただきます。
描画領域のバックは黄色にしています。その上に図形を複数個
ループでまわして上書きしています。したがってバックの色も
前に書いた図形も見えたままの状態で描画を繰り返したいのです。
クリップボードには全描画図形を貼り付けます。バックの色は無しです。

graphic変数.Clear(Color.White)を使うと最新の図形のみ表示され
他が消えてしまうという問題が残ります。
graphic変数.Clear(Color.Transparent)でも試したことがありますが
結果はやはりクリップボードを貼り付けるとバックの色が
青になってしまいました。(青が透明色だという設定がどこかに
あるのでしょうか?)

なにか良い解決策がありましたらお願いします。
まきさんこんばんは〜(挨拶忘れてました。

>graphic変数.Clear(Color.White)を使うと最新の図形のみ表示され
>他が消えてしまうという問題が残ります。
もしかすると、描画するたんびにgraphic変数.Clear(カラー)を呼び出していたり
はしませんかね?
もしそうだとすると、FormのLoadのときなどに一度だけやってあげれば
いいと思います。それと、新規に描画しなおすときなどに。

透明で塗ると青くなるのは
推測ですけど、青の上に透明を塗っても青のまんまだと思います。
デフォルトがなぜ青なのかは分かりません。

実際に、ループで絵を描画するのに似たようなプログラムを作ってみました。
サンプルは、フォームにペイントのように絵がかけるもので(色とかは無
描いたのと同じものがクリップボードにつねに描画されていくというものです。
処理の軽さや、フォームが隠れたときに絵が消えないようにするなどの
処理は、無しで作っています。
参考になったら、参考にしてみてください。

質問の内容と違うときは、突っ込みをお願いします。
(この記事にはファイル"ClipSmp.zip"が添付されていましたが、削除されました。)
コピーした画像の透明色が青になる問題は、以前掲示板で同様の質問がありました。

pictureBox.Imageをクリップボードへ転送
http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=4236&no=0&KLOG=2
■No4841に返信( テラオメガさんの記事)
プログラムまで作成していただきありがとうございました。
ご指摘のとおりFormのLoardの時に呼ぶように修正し
すべての描画図形が表示できるようになりました。

クリップボードに関してはまだ問題点が残っていて、
クリップボードにはバックの色無し(透明または白地)
の図形を貼り付けたいのです。

バックは単に黄色と書いてしまいましたがこれも図形で
別のbitmap変数に作成しています。つまり1つの描画領域に
2つのbitmapを描画しています。clear(color.white)を
使うとクリップボードはうまくいくのですが、画面表示は
バックの黄色い図形が隠れてしまうわけです。
いつも説明が足りなくて申し訳ありません。

結局一番最初の質問に戻るわけです。よろしくお願いいたします。

■No4844に返信(管理人さんの記事)
情報をありがとうございました。
リンク先を見てみましたが、私には理解することができませんでした。
残念です。
どうも。
はじめまして。

> リンク先を見てみましたが、私には理解することができませんでした。
> 残念です。
リンクの管理人さんの最後の発言は
 「具体的な解決法は、残念ながら、私にはよく分かりません。」
となっています。
この言葉から推測できる答えは1つしかないと思いますが・・・。
つまり、その解決策は管理人さんにもわからないということです。

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