对于我的应用程序,我使用了缩放缩放功能,通过改编教程并创建自定义视图http://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2-part-6-implementing-the-pinch-zoom-gesture/1847
现在我正在将缩放图像捕获为位图。
部分我可以通过使用
来获取位图setDrawingCacheEnabled(true);
Bitmap bm = Bitmap.createBitmap(finalView.getDrawingCache());
setDrawingCacheEnabled(false);
使用这种方法,我得到了缩放图像和屏幕背景。
有没有办法只将缩放的图像捕获为位图?
答案 0 :(得分:0)
尝试
setDrawingCacheEnabled(false)
finalView.setDrawingCacheEnabled(true);
Bitmap bm = Bitmap.createBitmap(finalView.getDrawingCache());
finalView.setDrawingCacheEnabled(false);
答案 1 :(得分:0)
经过大量搜索后,我在同一社区发现了一个“临时”解决方案。还要感谢同一篇文章中提供的'weakwire'代码。
Getting coordinates and width/height from a matrix
想法很简单,我所做的就是通过裁剪从缩放图像中删除背景屏幕。代码有点冗长,但对我有用。
首先获取原始位图大小
float imgWidth = imgBitmap.getWidth()
float imgHeight = imgBitmap.getHeight()
获取矩阵(我的应用程序中使用的缩放缩放功能使用矩阵'技巧')值,用于缩放图像并获得scaledWidth& scaled原始图像的高度。
float[] values = new float[9];
matrix.getValues(values);
float globalX = values[2];
float globalY = values[5];
float scaledWidth = values[0]*imgWidth;
float scaledHeight = values[4]*imgHeight;
// If zoomed Image gets out of screen, I'm trying to crop the image available in the screen by considering image from (0,0)
if(globalX<0)
globalX = 0;
if(globalY<0)
globalY = 0;
最后捕获视图并裁剪背景 在我的情况下(“finalView”是自定义视图名称,其中发生缩放缩放)
setDrawingCacheEnabled(false);
destroyDrawingCache();
finalView.setDrawingCacheEnabled(true);
Bitmap bm = Bitmap.createBitmap(finalView.getDrawingCache());
finalView.setDrawingCacheEnabled(false);
//Final Image Width & Height
int finalWidth = Math.min((int)width,(int)finalView.getWidth());
int finalHeight = Math.min((int)height,(int)finalView.getHeight());
//裁剪以获得缩放图像
Bitmap finalBitmap = Bitmap.createBitmap(bm, (int)globalX, (int)globalY, finalWidth ,finalHeight);
虽然这是一个临时解决方案,但它对我有用。如果有任何替代解决方案,请发布。
答案 2 :(得分:0)
此原始答案here,只需替换设置背景部分即可。希望它有所帮助
public static Bitmap getBitmapFromView(View view) {
if (view == null) return null;
//Define a bitmap with the same size as the view
Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
//Bind a canvas to it
Canvas canvas = new Canvas(returnedBitmap);
// draw white background on the canvas
canvas.drawColor(Color.WHITE);
// draw the view on the canvas
view.draw(canvas);
//return the bitmap
return returnedBitmap;
}