zipファイルから大きい画像を取得する際の挙動について

97 views
Skip to first unread message

Kiyoshi Noda

unread,
Jun 2, 2010, 12:40:23 AM6/2/10
to 日本Androidの会
はじめまして、野田と申します。

SDカードに格納してあるZIPファイルから大きい画像(2100 x 1400)を取得する為に、
下記の記述を行い、画像のサイズを取得しようとしているのですが、
optionZip.outWidth(), optionZip.outHeight() 共に-1でした。


File file;
ZipFile zipFile;
Enumeration<ZipEntry> enumeration;
BitmapFactory.Options optionZip;
InputStream inputStreamZip;

file = new
File(Environment.getExternalStorageDirectory().getPath() + " ZIPファイル
 ");
zipFile = new ZipFile(file);
enumeration = (Enumeration<ZipEntry>)zipFile.entries();

optionZip = new BitmapFactory.Options();
optionZip.inJustDecodeBounds = true;

if (enumeration.hasMoreElements()) {
inputStreamZip =
zipFile.getInputStream(enumeration.nextElement());
BitmapFactory.decodeStream(inputStreamZip, null, optionZip);
}


小さい画像が入った別のZIPファイルでは問題ありませんが、大きい画像となる所得できなくなる模様です。
同様の画像をリソースから取得した際には問題ありませんでした。(下記ソース)

BitmapFactory.Options optionResource;
InputStream inputStreamResource;

optionResource = new BitmapFactory.Options();
optionResource.inJustDecodeBounds = true;
inputStreamResource = getResources().openRawResource(R.drawable.
[大きい画像] );
BitmapFactory.decodeStream(inputStreamResource, null,
optionResource);

恐らくInputStreamが正常に取得できていないのではないかと思います。

どなたか詳しい方がおられましたら、ご教示頂けますでしょうか。


以上、宜しくお願いします。

Shoya Tsukada

unread,
Jun 2, 2010, 1:58:29 AM6/2/10
to android-g...@googlegroups.com
塚田です。

http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#outWidth
によると、-1が返る時はデコードがエラーになる時なので
if there is an error trying to decode, outWidth will be set to -1.

そもそもデコードもできないのでは?と思い、調べたところ
似たようなIssueがありました。
http://code.google.com/p/android/issues/detail?id=3095

解決にはなっていませんが、ひとまず情報です。


2010年6月2日13:40 Kiyoshi Noda <slapst...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>

--
塚田翔也
http://twitter.com/gabu
http://groups.google.com/group/android-nagoya-tsubu

Kiyoshi Noda

unread,
Jun 3, 2010, 2:10:21 AM6/3/10
to 日本Androidの会
回答ありがとうございます。

InflaterInputStreamだとデータが大きすぎる場合、デコードできないのかもしれませんね。
アプローチを変えて、一度キャッシュに解凍した上での取得を行ってみます。

Reply all
Reply to author
Forward
0 new messages