tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル背景が透明の画像をクリップボード経由で貼り付けると透過色が青色になる
記事No1986
投稿日: 2005/08/17(Wed) 21:56
投稿者ujimax
[OSのVer]:Windows XP   [VBのVer]:VB.NET 2003 
画面上の画像の背景を透明にしてクリップボードに取得しExcelなどに貼り付けたいのですが
貼り付けると透過色が青色になります。
Dim memoryImage as bitmap
Dim maskcolor as color
Dim datobj As New System.Windows.Forms.DataObject
memoryImage.MakeTransparent(maskcolor)
datobj.SetData(System.Windows.Forms.DataFormats.Bitmap, memoryImage)
System.Windows.Forms.Clipboard.SetDataObject(datobj)
この他いろいろな書式を用いたのですがだめでした。
一度クリップボードに置いたデータをファイル保存(gif/bmp)をすると透明になってます。
EXCELの図の挿入コマンドを使うとちゃんと透明に表示されます。

memoryImageはAPIのbitbit関数で取得したものです。

クリップボード経由で直接EXcelに貼付はどうすればよいのでしょうか?

[ツリー表示へ]
タイトルRe: 背景が透明の画像をクリップボード経由で貼り付けると透過色が青色になる
記事No1987
投稿日: 2005/08/18(Thu) 09:36
投稿者K.J.K.
"GIF"でクリップボードに送るとか。
# Excelは"JFIF"にも対応していたはず。

[ツリー表示へ]
タイトルRe^2: 背景が透明の画像をクリップボード経由で貼り付けると透過色が青色になる
記事No1988
投稿日: 2005/08/18(Thu) 10:03
投稿者ujimax
[OSのVer]:Windows    [VBのVer]:VB.NET  
> "GIF"でクリップボードに送るとか。
> # Excelは"JFIF"にも対応していたはず。

ありがとうございます
GIFもPNGも試したけど結果は同じなんですよ・・・・
JFIFはVBが設定できないかも・・・

[ツリー表示へ]
タイトルRe: 背景が透明の画像をクリップボード経由で貼り付けると透過色が青色になる
記事No1989
投稿日: 2005/08/18(Thu) 10:43
投稿者K.J.K.
> GIFもPNGも試したけど結果は同じなんですよ・・・・
> JFIFはVBが設定できないかも・・・

どのようなコードで試したのですか?

[ツリー表示へ]
タイトルRe^2: 背景が透明の画像をクリップボード経由で貼り付けると透過色が青色になる
記事No1990
投稿日: 2005/08/18(Thu) 11:50
投稿者ujimax
[OSのVer]:Windows    [VBのVer]:VB.NET  
ごめんどうかけます

Dim memoryImage as Bitmap
Dim myImage As Bitmap

memoryImage.MakeTransparent(maskcolor)
savefile = "\temp.png"
memoryImage.Save(savefile, System.Drawing.Imaging.ImageFormat.Png)
myImage = System.Drawing.Bitmap.FromFile(savefile)
Clipboard.SetDataObject(myImage)

いろいろと書き換えていて定かではないのですがこんな感じだったと思います
clipboardに直接ではなく一度データを保存して読み込むように書きました。
型宣言のbitmapがいけないのでしょうか?
myimageの拾い方の間違いでしょうか?

[ツリー表示へ]
タイトルRe: 背景が透明の画像をクリップボード経由で貼り付けると透過色が青色になる
記事No1991
投稿日: 2005/08/18(Thu) 11:57
投稿者K.J.K.
そのコードでは結局Bitmapとしてクリップボードに送っているだけですよね。
RegisterClipboardFormat("GIF\0")のFormatIDで、且つ、中身もGIFのFormat
のデータであるものを送り付けましょう。

[ツリー表示へ]
タイトルRe^2: 背景が透明の画像をクリップボード経由で貼り付けると透過色が青色になる
記事No1992
投稿日: 2005/08/18(Thu) 17:04
投稿者ujimax
[OSのVer]:Windows    [VBのVer]:VB.NET  
> そのコードでは結局Bitmapとしてクリップボードに送っているだけですよね。
> RegisterClipboardFormat("GIF\0")のFormatIDで、且つ、中身もGIFのFormat
> のデータであるものを送り付けましょう。

申し訳ありません
RegisterClipboardFormat("GIF\0")のFormatIDの取得まではできたのですが
FormatIDの使用法がわからず
クリップボードへの送りつけがわかりません。

[ツリー表示へ]
タイトルRe: 背景が透明の画像をクリップボード経由で貼り付けると透過色が青色になる
記事No1993
投稿日: 2005/08/18(Thu) 18:55
投稿者K.J.K.
API関数のSetclipboardDataなどで、メモリー上のバイナリ(MemoryStreamなど)
にSaveしたデータを送り込むとか。

他に、API関数のOleSetClipboardを使って、同様のデータを送り込む、という
手もありますよね。まぁ、いろいろやってみてください。

[ツリー表示へ]