サーバーから画像をダウンロードして、Androidの内部ストレージに保存しようとしています。2 MB 未満の画像をダウンロードしている場合、すべてのケースで問題なく動作しています。しかし、サイズが 2 MB を超える JPEG 画像をダウンロードすると、2 つの問題に直面します。
1 つ目は、エミュレーターを使用してサーバーからイメージをダウンロードして保存しようとすると、「ビットマップ サイズが VM の予算を超えています」などのエラーが発生し、アクティビティがクラッシュすることです。
2 番目の問題は、この問題は自分の携帯電話でアプリケーションを実行したときではなく、代わりに別の問題が発生していることです。ダウンロードした画像を表示すると、画像に他の色 (虹色のようなもの) も含まれています。
画像をダウンロードして保存するために使用しているコードは次のとおりです。
//For downloading the image file
void downloadFile(String fileUrl)
{
URL myFileUrl = null;
try {
myFileUrl = new URL(fileUrl);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try
{
HttpURLConnection conn = (HttpURLConnection) myFileUrl .openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bmImg = BitmapFactory.decodeStream(is);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//For saving the downloaded image
void saveImage() {
try
{
String fileName ="displayimg.png";
final FileOutputStream fos = openFileOutput(fileName, Activation.MODE_PRIVATE);
bmImg.compress(CompressFormat.PNG, 90, fos);
} catch (Exception e)
{
e.printStackTrace();
}
}
画像を表示するコードは次のとおりです。
private Bitmap myBitmap;
myBitmap= BitmapFactory.decodeFile(imgFile.getAbsolutePath());
ivDisplayImage.setImageBitmap(myBitmap);