bitmap,Bitmap.createBitmap方法的x,y的值设置为10,10,设置为-10,-10报错

之前有用到Bitmap.createBitmap方法,搞了N久,跟楼主有一样的问题,一张图片下去截,怎么截都出不来,老报错,郁闷了好久。。。
终于在我不断努力的实验下,终于找到了答案。希望这篇文章能够解决各位的问题。
关于Bitmap.createBitmap方法的注意事项:
1: 你可以试着打印 Bitmap bmp = Bitmap.creatBitmap(....); 创建出来的 bmp 的高度和宽度,你看下是不是比原图要小。如果是,那么你找到了问题的所在,据我测试了解到,在 drawable下面的资源如果你的图片很大,android会自动处理成合适的。当你还按照原来的尺寸大小去截图的话,肯定会报错。
Bitmap bmp = Bitmap.createBitmap(bitmap, x, y, width, height); 中有这样的规定: x + width <= bmp.getWidth(); y + height <= bmp.getHeight(); 否则报错。
2:解决办法:将资源文件不放在 drawable 下面,是不是就不会android自动处理了。经过实验确实如此。那么我想到可以放到 assets 下面(并且assets下面是可以建自己的包的。在取的时候只需要把包名加上)
然后再用createBitmap()方法去截取,这样截取出来的图片(只要你的参数设置合理)都没有问题。 AssetManager am = this.getAssets();
InputStream is = am.open("common_enter.png"); //放在assets目录下面; 如果有包,如: public 包 , InputStream is = am.open("pulbic/common_enter.png");
Bitmap bitmap = BitmapFactory.decodeStream(is);
bitmap = Bitmap.createBitmap(bitmap, 6, 892, 348, 119);
3 :如果要确认的话,可以将图片输出到sdcard里面,然后去DDMS里面pull出来看一下是不是你想要的结果。
FileOutputStream fos = null;
try {
AssetManager am = this.getAssets();
InputStream is = am.open("common_enter.png");
Bitmap bitmap = BitmapFactory.decodeStream(is);
bitmap = Bitmap.createBitmap(bitmap, 6, 892, 348, 119);
fos = openFileOutput("image", Context.MODE_PRIVATE);
bitmap.compress(Bitmap.CompressFormat.JPEG, 60, fos);
System.out.println("==w=="+bitmap.getWidth());
System.out.println("==h=="+bitmap.getHeight());
} catch (Exception e) {
} finally {
if (fos != null) {
try {
fos.flush();
fos.close();
} catch (IOException e) {
}
}
}
Tags:  bitmap类 bitmap

延伸阅读

最新评论

发表评论