tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルimageコントロールで表示できないビットマップ
記事No15187
投稿日: 2011/05/30(Mon) 13:43
投稿者chacha

VB6.0にて開発をしています。
(VB歴は4年、OSはVistaです)

バイナリアクセスでビットマップファイルを作成し、
imageコントロールに表示させようとしているのですが、
表示できる画像と表示できない画像があります。

表示できない画像の場合、「ピクチャが不正です」の実行時エラーが出ます。
ファイルが壊れている、またはimageコントロールでサポートしていない拡張子の画像を
表示させようとした場合にこのエラーが出るようなのですが、
今回はどちらなのか不明です。。申し訳ありません。
(元の画像サイズが大きすぎるのでしょうか?)

このような画像は、imageコントロールではなくpictureコントロールや
LEADTOOLSを使用すれば表示できるのでしょうか?
ご教示お願いいたします。

[ツリー表示へ]
タイトルRe: imageコントロールで表示できないビットマップ
記事No15190
投稿日: 2011/05/30(Mon) 14:22
投稿者花ちゃん
> バイナリアクセスでビットマップファイルを作成し、
> imageコントロールに表示させようとしているのですが、
> 表示できる画像と表示できない画像があります。

imageコントロールに表示できるのは、bmp・dib・gif・jpg・wmf・emf・ico・curの
拡張子のファイルだけです。


> 今回はどちらなのか不明です。。申し訳ありません。
それは、貴方しか解らないので、自分で調べるしかないのでは?

> バイナリアクセスでビットマップファイルを作成し、
そのファイルのフォーマット形式はどうなっていますか?
http://www.kk.iij4u.or.jp/~kondo/bmp/

[ツリー表示へ]
タイトルRe^2: imageコントロールで表示できないビットマップ
記事No15191
投稿日: 2011/05/30(Mon) 14:39
投稿者chacha
>>花ちゃんさん

レス、ありがとうございます。
申し送れましたが、画像ファイルの構造などに関してはほぼ無知な初心者です。

> > 今回はどちらなのか不明です。。申し訳ありません。
> それは、貴方しか解らないので、自分で調べるしかないのでは?

bmpファイルなので拡張子の問題ではないと思いますが、
原因を特定できませんでした。

> そのファイルのフォーマット形式はどうなっていますか?
> http://www.kk.iij4u.or.jp/~kondo/bmp/

すみません、フォーマット形式はどこを確認すればわかるのでしょうか?

[ツリー表示へ]
タイトルRe^3: imageコントロールで表示できないビットマップ
記事No15193
投稿日: 2011/05/30(Mon) 15:15
投稿者魔界の仮面弁士
> > そのファイルのフォーマット形式はどうなっていますか?
> > http://www.kk.iij4u.or.jp/~kondo/bmp/
> すみません、フォーマット形式はどこを確認すればわかるのでしょうか?

提示された URL にも書かれていますが、そのファイルを
バイナリエディタで開いた時に、先頭 2 バイトが
"BM" という文字(すなわち 42,4D )になっているものが bmp 形式です。

bmp であることを確認できた場合は、エクスプローラーから
そのファイルのプロパティを開き、[概要]タブの内容を確認してください。
イメージの「フレーム数」が 1 では無かった場合や、
「ビットの深さ」が 32 になっている場合などは、
LoadPicture では恐らく読み込めないでしょう。

[ツリー表示へ]
タイトルRe: imageコントロールで表示できないビットマップ
記事No15192
投稿日: 2011/05/30(Mon) 15:10
投稿者魔界の仮面弁士
> imageコントロールでサポートしていない拡張子の画像を
拡張子は関係ありません。BMP ファイルや ICO ファイルの拡張子を
.TXT や .chacha に変更したとても、画像のロード可否には無関係です。


> (元の画像サイズが大きすぎるのでしょうか?)
画像形式は何でしょうか?
また、どのようにして読み込もうとしているのでしょうか?

gdiplus.dll で読み込ませるのであれば、利用可能な画像は
GDI+ 1.0 の制限に引きずられますし、LEADTOOLS を使うなら、
そのコンポーネント側の仕様に依存するでしょう。

標準的な LoadPicture で読み込もうとしている場合でさえも、
OS 側の DLL バージョンによって読み込める画像が異なります。
たとえば、今でこそ一般的な JPEG や GIF は、初期の Win95 では
読み込めませんでしたし、最近の OS 環境であっても、
JPEG 2000 形式の JPG 画像はサポートされていません。

たとえば、当方環境で LoadPicture の動作を見てみると、
このような差異が生じました。
・32bit Bitmap → α値が無視される。
・24bit Bitmap → 読み込める。
・Png → 読み込めない。
・GIF89aインターレース → 一部のパスしか読み込まれない。
・GIF87 → 最近の環境なら読み込める。


> ファイルが壊れている、または
(中略)
> このような画像は
壊れていた場合は、基本的にどうやっても読めないでしょう。
破損の程度にもよりますが、壊れていない画像を用意してください。

> 元の画像サイズが大きすぎるのでしょうか?
どの程度の大きさなのか、どのような形式なのかも記載されていない
状態では、何とも判断が付きかねます。(^_^;)

# せめて元の画像をダウンロードできるようにしておいて
# 頂ければ、調査ぐらいはできるのですけれども。

[ツリー表示へ]
タイトルRe^2: imageコントロールで表示できないビットマップ
記事No15194
投稿日: 2011/05/30(Mon) 20:46
投稿者chacha
>>魔界の仮面弁士さん

ご教示いただき、ありがとうございます。

> 提示された URL にも書かれていますが、そのファイルを
> バイナリエディタで開いた時に、先頭 2 バイトが
> "BM" という文字(すなわち 42,4D )になっているものが bmp 形式です。

→"BM"となっていました。

> bmp であることを確認できた場合は、エクスプローラーから
> そのファイルのプロパティを開き、[概要]タブの内容を確認してください。
> イメージの「フレーム数」が 1 では無かった場合や、
> 「ビットの深さ」が 32 になっている場合などは、
> LoadPicture では恐らく読み込めないでしょう。

→ビットの深さは24でした。

もともとはバイナリアクセスでTEMPフォルダ直下にビットマップファイルを作成し、
それをimageコントロールにLoadPictureで表示させようとしていました。
表示できない画像の大きさは共通していませんでしたが、
たとえば725×1000の画像が表示できませんでした。

さきほどLEADTOOLSを適用したところ
表示できなかった画像が表示できるようになりました。

詳しく教えてくださったにもかかわらず
詳細な文章でお伝えせず、申し訳ありませんでした。
根本的に何が原因なのかは、ファイルや構造の知識をもっとつけて
なるべく自分で調べられるようにいたします。
ありがとうございました。

[ツリー表示へ]