そのため、decodeFileを使用して画像を読み込む関数があります。次に、写真のサイズを変更して、キャンバスに描画します。これは、Moto Droid2.2.3とNexus4.1.1で非常にうまく機能しますが、HTC 4.0.3では、createScaledBitmapが起動するたびにクラッシュし、「FailedToCreateSkBitmap」というエラーがスローされます...
これがコードのサンプルです...
// create image bitmap
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inPurgeable = true;
bmOptions.inSampleSize = 2;
Bitmap rawImage = BitmapFactory.decodeFile(imageURL,bmOptions);
Bitmap bmp = Bitmap.createBitmap(rawImage);
float ratio = 0;
int maxHeight = 900;
int maxWidth = 900;
float height = bmp.getHeight();
float width = bmp.getWidth();
Log.d("HEIGHT",""+height);
Log.d("WIDTH",""+width);
int nh = 0;
int nw = 0;
// check if current width is larger
if(width > maxWidth){
ratio = maxWidth / width;
float newWidth = maxWidth;
float newHeight = height*ratio;
nw = Math.round(newWidth);
nh = Math.round(newHeight);
Log.d("NEW RATIO",""+ratio);
Log.d("NEW HEIGHT",""+newHeight);
// RESET HEIGHT AND WIDTH
height = height * ratio;
width = width * ratio;
}
if(height > maxHeight){
ratio = maxHeight / height;
float newWidth = width*ratio;
float newHeight = maxHeight;
nw = Math.round(newWidth);
nh = Math.round(newHeight);
Log.d("NEW RATIO",""+ratio);
Log.d("NEW HEIGHT",""+newHeight);
height = height * ratio;
width = width * ratio;
}
bmp = Bitmap.createScaledBitmap(bmp,nw,nh,false);
Bitmap img = Bitmap.createBitmap(bmp,0,0,655,655);
私が言ったように、これは他のデバイスやAndroidのバージョンで正常に機能します...検索しようとしましたが、この問題に実際に対処するものが見つからないようです...
私はそれがcreateScaledBitmapであることを知っています。なぜなら、その行をコメントするとすべてが機能するからですが、私のビットマップはスケーリングされません。