1

そのため、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であることを知っています。なぜなら、その行をコメントするとすべてが機能するからですが、私のビットマップはスケーリングされません。

4

1 に答える 1

0

これに答えるには-

本当の問題は、その特定のデバイスでは、サイズ変更率が大きすぎて、定義された655領域に収まらず、画像がわずかに小さすぎることでした。これにより、サイズ変更エラーが発生しましたが、4.0.3を実行しているHTCデバイスではスローされていました。 「SkBitmapの作成に失敗しました」エラー。

解決策は、サイズ変更された画像のサイズを調整することでした。

于 2012-09-07T15:18:51.983 に答える