0

我试图在第二个右侧粘贴一个位图。这是我的代码:

public static Bitmap getGluedBitmap(File left, File right, int reqWidth, int reqHeight, LruCache<String, Bitmap> mCache)
    {
        Bitmap lefty = decodeSampledBitmapFromFile(left, reqWidth / 2, reqHeight, 2, mCache);
        Bitmap righty = decodeSampledBitmapFromFile(right, reqWidth / 2, reqHeight, 2, mCache);
        Bitmap output = Bitmap.createBitmap(reqWidth, reqHeight, Config.ARGB_8888);
        Canvas canvas = new Canvas(output);
        canvas.drawBitmap(lefty, null, new Rect(0, 0, canvas.getWidth() / 2, canvas.getHeight()), null);
        canvas.drawBitmap(righty, null, new Rect(canvas.getWidth() / 2 + 1, 0, canvas.getWidth(), canvas.getHeight()), null);

        return output;
    }

这是decodeSampledBitmapFromFile来自 Google 示例的方法,针对我的需求进行了优化:

public static Bitmap decodeSampledBitmapFromFile(File file, int reqWidth, int reqHeight, int state, LruCache<String, Bitmap> mCache) {
        String imageKey = String.valueOf(file.getAbsolutePath());
        imageKey += state;
        Bitmap bitmap = getBitmapFromMemCache(imageKey, mCache);
        if (bitmap == null) {
            // First decode with inJustDecodeBounds=true to check dimensions
            final BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeFile(file.getAbsolutePath(), options);

            // Calculate inSampleSize
            options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

            // Decode bitmap with inSampleSize set
            options.inJustDecodeBounds = false;

            boolean done = false;
            while(!done)
            {
                try {
                    bitmap = BitmapFactory.decodeFile(file.getAbsolutePath(), options);
                    done = true;
                } catch (OutOfMemoryError e) {
                    // Ignore.  Try again.
                }
            }
            return addBitmapToMemoryCache(imageKey, bitmap, mCache);
        }
        else
        {
            return bitmap;
        }
    }

此方法在缓存中按键搜索图片,state用于缓存不同版本的图片,即小版本,大版本等。另外,你可以看到解码文件的一些歪钉,但这一步是临时的,我会修复这个以后。您只需要知道这种方法的正确率是 146%。

问题是:我用第一种方法创建的位图不正确,并且没有显示。我的意思是这个位图的宽度和高度由于某种原因等于-1。但是,位图左右的宽度也等于-1,但是我尝试过显示这些位图并且效果很好。

如果我合并位图错误,请告诉我。

4

1 回答 1

0

好吧,代码是绝对正确的。出于某种原因,我的设备无法显示生成的位图。我尝试将此代码构建到其他设备,并且效果很好。感谢您的关注。

于 2013-07-30T10:57:25.380 回答