我试图在第二个右侧粘贴一个位图。这是我的代码:
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,但是我尝试过显示这些位图并且效果很好。
如果我合并位图错误,请告诉我。