
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として定義されていて、
型が配列ではないのですが
どのようにして扱えば良いのでしょうか?
一応、検索などして調べてみましたが
分かりませんでしたので教えてください。
No.1ベストアンサー
- 回答日時:
(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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Excel(エクセル) エクセルでSUMIFS関数で条件範囲の部分が#valueになる。 4 2023/04/28 12:42
- Microsoft ASP プログラミング関係で質問です。 3 2022/10/11 16:06
- WordPress(ワードプレス) ホームページの画像が入れ替わらない 3 2022/12/24 16:00
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vba フィルター 複数条件 3つ以...
-
VBA 変数名に変数を使用したい。
-
配列のペースト出力結果の書式...
-
画像ファイルを配列に格納する方法
-
1次元配列をワークシートに高...
-
Excel2010のinputboxで複数デー...
-
配列の中から最大値だけ取り出...
-
ジャグ配列生成時の1オリジン
-
レコードセットの中身を配列に...
-
C#でbyte配列から画像を表示さ...
-
VB.NETにて、構造体へデータを...
-
free()関数の多用 と Segment...
-
エクセルでXY座標に並べられた...
-
vbaで配列に値を格納する場合
-
POSTデータの2次元配列
-
大至急!!! プログラミングC...
-
C#,繰り返し処理での最大値の取...
-
COBOLの基本的な事なので...
-
EXCELで年齢別の分布表を...
-
2次元配列を部分的に削除する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
配列の中の最大値とそのインデ...
-
エクセルでXY座標に並べられた...
-
Dir関数で読み取り順を操作でき...
-
配列のペースト出力結果の書式...
-
COBOLの基本的な事なので...
-
複数のtextboxの処理を一括で行...
-
構造体配列の特定のメンバーをF...
-
大量の変数を定義するにはどう...
-
CheckBoxの配列化
-
Excelのメモリ(配列)の上限は2G...
-
VB6のメモリ解放に関して
-
ReDim PreserveよりもReDimが遅い
-
Excel2010のinputboxで複数デー...
-
定数配列の書き方
-
コンボボックスのインデックス...
-
EXCELを使って、アクセスログを...
-
レコードセットの中身を配列に...
おすすめ情報