アプリ版:「スタンプのみでお礼する」機能のリリースについて

http://oshiete.goo.ne.jp/qa/8852322.html


このページで、
配列から直接圧縮画像ファイルを出力する方法を教えていただきました。

次は圧縮画像ファイルから配列を読み取るプログラムを作りたいと考えています。

http://tanlab.blog.fc2.com/blog-entry-31.html

このページで画像ファイルをメモリに読み込む方法は書かれていて、
GdipCreateBitmapFromFile(ByVal StrPtr(file1), image)

で変数imageに読み込むことができます。

このimageを上記のページの変数pDstBitmapに回すことで、
読み込んだ画像を別の画像として出力できることがわかりました。

いまやりたいことは
変数imageあるいは変数pDstBitmapを配列に書き出すことなのですが
どうやれば良いでしょうか?

これらの変数はLongとして定義されていて、
型が配列ではないのですが
どのようにして扱えば良いのでしょうか?

一応、検索などして調べてみましたが
分かりませんでしたので教えてください。

A 回答 (1件)

http://oshiete.goo.ne.jp/qa/8852322.html
(http://oshiete.goo.ne.jp/qa/8852322.html)
で回答した者ですが、実はあの#1-2のコードには前半があって、ファイルからセル色に取り込んでいるのです。その部分を投稿しますので改造して下さい。

'(2) ファイルから画像を読み込みbitmapオブジェクトに変換する
If GdipCreateBitmapFromFile(ByVal StrPtr(strInName), pSrcBitmap) <> 0 Then
Exit Sub
End If
'(3) 読み込んだ画像のサイズを取得
'画素数は480x360程度でないと、書式が多すぎるというエラーが発生する
GdipGetImageWidth pSrcBitmap, lngWidth
GdipGetImageHeight pSrcBitmap, lngHeight

'(4) bitmapオブジェクトから1画素ずつ読み込んで、エクセルのセルのColorに設定
'GDI+から取得する色は透明度を含むARGBであるが、セルに設定する場合はBGRに変換する必要がある
Application.ScreenUpdating = False
For y = 0 To lngHeight - 1
For x = 0 To lngWidth - 1
'画素の色を取り出し、文字列に変換する
'ビットシフトは面倒そうなので、スピードは犠牲にして?文字列に変換して処理
GdipBitmapGetPixel pSrcBitmap, x, y, myARGB
strARGB = Hex(myARGB&)
With ActiveSheet
Range(.Cells(1, 1), .Cells(1, lngWidth)).ColumnWidth = 1.63
'ARGB->BGRに変換してセル色に変換
.Cells(y + 1, x + 1).Interior.color = RGB(CInt("&H" & Mid(strARGB, 3, 2)), CInt("&H" & Mid(strARGB, 5, 2)), CInt("&H" & Mid(strARGB, 7, 2)))
End With
Next x
Next y
Application.ScreenUpdating = True

>これらの変数はLongとして定義されていて、
>型が配列ではないのですが
>どのようにして扱えば良いのでしょうか?
ここでのimage、pDstBitmapは「ハンドル」と言われるものです。画像ファイルが読み込まれ、ビットマップオブジェクトが生成された時に、Windowsによってつけられた管理番号といった感じでしょうか。

ついでに、先のQAのARGBのオーバーフローについてですが、下記をご参照下さい。
http://support.microsoft.com/kb/189323/en-us
機械翻訳したページもありますが、よけいに分かり難いような...
http://support.microsoft.com/kb/189323
    • good
    • 0
この回答へのお礼

ありがとうございます。
うまくいきました。


あともう一つ質問がありますので
どうかよろしくお願いいたします。

お礼日時:2014/12/14 18:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!