首页 > 代码库 > 关于Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height)这个方法

关于Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height)这个方法

============问题描述============


Bitmap android.graphics.Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height)
这个方法屌爆了,不会用

后面的四个参数到底啥意思啊
不是说截的是一个矩形的x,y,宽高吗/
为何我传入这个:
Bitmap bitmap = Bitmap.createBitmap(b1, 0, 20, b1.getWidth(),
b1.getHeight());
我的意思是从20的高度开始一直到图片的最后

就给我报这个错误
java.lang.IllegalArgumentException: y + height must be <= bitmap.height()
我擦,难道要我填写一个负数么...

============解决方案1============


这个方法很坑爹的。
动不动就内存溢出。。
建议使用
Bitmap dragimg=Bitmap.createScaledBitmap(bmp, lockWidth, lockWidth, true);
方法
输入值分别是
被转换的图片对象
宽和高
最后一个参数是 是否保证等比

============解决方案2============


引用 2 楼 siyehua 的回复:
Quote: 引用 1 楼 AA5279AA 的回复:

这个方法很坑爹的。
动不动就内存溢出。。
建议使用
Bitmap dragimg=Bitmap.createScaledBitmap(bmp, lockWidth, lockWidth, true);
方法
输入值分别是
被转换的图片对象
宽和高
最后一个参数是 是否保证等比


可以我不想要整张图片.我只想要部分的,就是我不想要最上面的...

你看看你吧图片放到哪一个文件夹里面了。
如果你放在
xxhdpi文件夹里面的话,图片读出来会比真实的要小。有可能会出你列出来的那种错误。

============解决方案3============


引用 4 楼 siyehua 的回复:
Quote: 引用 3 楼 AA5279AA 的回复:

Quote: 引用 2 楼 siyehua 的回复:

Quote: 引用 1 楼 AA5279AA 的回复:

这个方法很坑爹的。
动不动就内存溢出。。
建议使用
Bitmap dragimg=Bitmap.createScaledBitmap(bmp, lockWidth, lockWidth, true);
方法
输入值分别是
被转换的图片对象
宽和高
最后一个参数是 是否保证等比


可以我不想要整张图片.我只想要部分的,就是我不想要最上面的...

你看看你吧图片放到哪一个文件夹里面了。
如果你放在
xxhdpi文件夹里面的话,图片读出来会比真实的要小。有可能会出你列出来的那种错误。


我其实就是截屏.我得到的一个Bitmap是包括状态栏的,问题状态栏还是白色的,我现在就是要把最上面的那部分白色去掉.然后保存起来

你获取图片bmp
然后bmp.getHeight()就是这个图片的高度,比方300
然后变色的高度为100
那就设置
Bitmap.createBitmap(bmp, 0, 100, bmp.getWidht(), 200);
就行了。

============解决方案4============


java.lang.IllegalArgumentException: y + height must be <= bitmap.height()
是指从一张图片上取某一块,从y点开始到height结束的区域。而你的方法中截取的已经超出图片范围外了。

如:
Bitmap android.graphics.Bitmap.createBitmap(source, 0, 0,  100, 100)就是从图片source的左上角到图片100宽和100高截图

============解决方案5============


引用 7 楼 siyehua 的回复:
Quote: 引用 6 楼 scliu0718 的回复:

java.lang.IllegalArgumentException: y + height must be <= bitmap.height()
是指从一张图片上取某一块,从y点开始到height结束的区域。而你的方法中截取的已经超出图片范围外了。

如:
Bitmap android.graphics.Bitmap.createBitmap(source, 0, 0,  100, 100)就是从图片source的左上角到图片100宽和100高截图

我知道啊,只是我截取的肯定是没有超过的
我的是:Bitmap.createBitmap(b1, 0, 20, b1.getWidth(),b1.getHeight());
,宽度和高度都没有超过,但是这个方法的计算方式是:20+b1.getHeight(),这个肯定超过了...
所以我觉得她这个方法的计算方式有问题

哦,哪我们就错了,后两个参数应该就是截取后图片的高度和宽度吧

关于Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height)这个方法