0

奇妙な問題が1つあり、すでに数時間解決しようとしています。問題は、以下のこのコードは、名前の最初の文字が小さい画像を除くすべての画像をデコードできることです。たとえば、Dog.pngまたは123.pngでは機能しますが、dog.png、cat.png、または最初の文字が小さいその他の機能では機能しません。ランダムな色で表示されます。よくわかりません。何か案は?

    Bitmap bitmap = null;

    options.inJustDecodeBounds = false;
    try {
        bitmap =  BitmapFactory.decodeStream((InputStream)new URL(imagePath).getContent(), null, options);
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    image.setImageBitmap(bimage);
4

1 に答える 1

2

解決策を見つけました。これらの URL からの画像はデコードできますが、問題はサイズが大きすぎて極端に拡大され、表示されていないように見えることでした。

まず、次のような画像の説明をキャッチする必要があります。

options.inJustDecodeBounds = true;
BitmapFactory.decodeStream((InputStream)new URL(url).getContent(), null, options);

次に、必要な幅/高さにスケーリングします。reqHeight/reqWidth は必要なサイズ パラメーターです。

int height = options.outHeight;
int width = options.outWidth;
int inSampleSize;

if (height > reqHeight || width > reqWidth) {
if (width > height) {
inSampleSize = Math.round((float)height / (float)reqHeight);
} 
else {
inSampleSize = Math.round((float)width / (float)reqWidth);
}
}

その後、質問からそのコードを繰り返すだけです:

Bitmap bitmap = null;

options.inJustDecodeBounds = false;
try {
    bitmap =  BitmapFactory.decodeStream((InputStream)new URL(imagePath).getContent(), null, options);
} catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

これで、それをいくつかのディレクトリに保存できます。

File file = new File(some_path\image.png);

    if (!file.exists() || file.length() == 0) {
            file.createNewFile();
            FileOutputStream fos = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
            fos.close();
            fos.flush();

画像が保存され、それを取得して、image という ImageView に表示できます。

Bitmap bitmap = BitmapFactory.decodeFile(some_path\image.png);
image.setImageBitmap(bitmap);
于 2012-12-20T09:21:43.543 に答える