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

ARy 2013-12-23 05:09:39
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()
我擦,难道要我填写一个负数么...
...全文
1084 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dufangyu1990 2014-09-23
  • 打赏
  • 举报
回复
引用 1 楼 AA5279AA 的回复:
这个方法很坑爹的。 动不动就内存溢出。。 建议使用 Bitmap dragimg=Bitmap.createScaledBitmap(bmp, lockWidth, lockWidth, true); 方法 输入值分别是 被转换的图片对象 宽和高 最后一个参数是 是否保证等比
我现在想截取一部分图片,用这个方法报oom,请问有什么方法解决吗?
逐Ls梦 2013-12-24
  • 打赏
  • 举报
回复
引用 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(),这个肯定超过了... 所以我觉得她这个方法的计算方式有问题[/quote] 哦,哪我们就错了,后两个参数应该就是截取后图片的高度和宽度吧
ARy 2013-12-23
  • 打赏
  • 举报
回复
引用 5 楼 AA5279AA 的回复:
[quote=引用 4 楼 siyehua 的回复:] [quote=引用 3 楼 AA5279AA 的回复:] [quote=引用 2 楼 siyehua 的回复:] [quote=引用 1 楼 AA5279AA 的回复:] 这个方法很坑爹的。 动不动就内存溢出。。 建议使用 Bitmap dragimg=Bitmap.createScaledBitmap(bmp, lockWidth, lockWidth, true); 方法 输入值分别是 被转换的图片对象 宽和高 最后一个参数是 是否保证等比
可以我不想要整张图片.我只想要部分的,就是我不想要最上面的...[/quote] 你看看你吧图片放到哪一个文件夹里面了。 如果你放在 xxhdpi文件夹里面的话,图片读出来会比真实的要小。有可能会出你列出来的那种错误。 [/quote] 我其实就是截屏.我得到的一个Bitmap是包括状态栏的,问题状态栏还是白色的,我现在就是要把最上面的那部分白色去掉.然后保存起来[/quote] 你获取图片bmp 然后bmp.getHeight()就是这个图片的高度,比方300 然后变色的高度为100 那就设置 Bitmap.createBitmap(bmp, 0, 100, bmp.getWidht(), 200); 就行了。 [/quote] 这样子导致我真正的图片大小只有100个单位的高度 因为是从100-200,后面的200-300也是需要的,却截取不了
ARy 2013-12-23
  • 打赏
  • 举报
回复
引用 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(),这个肯定超过了... 所以我觉得她这个方法的计算方式有问题
逐Ls梦 2013-12-23
  • 打赏
  • 举报
回复
java.lang.IllegalArgumentException: y + height must be <= bitmap.height() 是指从一张图片上取某一块,从y点开始到height结束的区域。而你的方法中截取的已经超出图片范围外了。 如: Bitmap android.graphics.Bitmap.createBitmap(source, 0, 0, 100, 100)就是从图片source的左上角到图片100宽和100高截图
失落夏天 版主 2013-12-23
  • 打赏
  • 举报
回复
引用 4 楼 siyehua 的回复:
[quote=引用 3 楼 AA5279AA 的回复:] [quote=引用 2 楼 siyehua 的回复:] [quote=引用 1 楼 AA5279AA 的回复:] 这个方法很坑爹的。 动不动就内存溢出。。 建议使用 Bitmap dragimg=Bitmap.createScaledBitmap(bmp, lockWidth, lockWidth, true); 方法 输入值分别是 被转换的图片对象 宽和高 最后一个参数是 是否保证等比
可以我不想要整张图片.我只想要部分的,就是我不想要最上面的...[/quote] 你看看你吧图片放到哪一个文件夹里面了。 如果你放在 xxhdpi文件夹里面的话,图片读出来会比真实的要小。有可能会出你列出来的那种错误。 [/quote] 我其实就是截屏.我得到的一个Bitmap是包括状态栏的,问题状态栏还是白色的,我现在就是要把最上面的那部分白色去掉.然后保存起来[/quote] 你获取图片bmp 然后bmp.getHeight()就是这个图片的高度,比方300 然后变色的高度为100 那就设置 Bitmap.createBitmap(bmp, 0, 100, bmp.getWidht(), 200); 就行了。
ARy 2013-12-23
  • 打赏
  • 举报
回复
引用 3 楼 AA5279AA 的回复:
[quote=引用 2 楼 siyehua 的回复:] [quote=引用 1 楼 AA5279AA 的回复:] 这个方法很坑爹的。 动不动就内存溢出。。 建议使用 Bitmap dragimg=Bitmap.createScaledBitmap(bmp, lockWidth, lockWidth, true); 方法 输入值分别是 被转换的图片对象 宽和高 最后一个参数是 是否保证等比
可以我不想要整张图片.我只想要部分的,就是我不想要最上面的...[/quote] 你看看你吧图片放到哪一个文件夹里面了。 如果你放在 xxhdpi文件夹里面的话,图片读出来会比真实的要小。有可能会出你列出来的那种错误。 [/quote] 我其实就是截屏.我得到的一个Bitmap是包括状态栏的,问题状态栏还是白色的,我现在就是要把最上面的那部分白色去掉.然后保存起来
失落夏天 版主 2013-12-23
  • 打赏
  • 举报
回复
引用 2 楼 siyehua 的回复:
[quote=引用 1 楼 AA5279AA 的回复:] 这个方法很坑爹的。 动不动就内存溢出。。 建议使用 Bitmap dragimg=Bitmap.createScaledBitmap(bmp, lockWidth, lockWidth, true); 方法 输入值分别是 被转换的图片对象 宽和高 最后一个参数是 是否保证等比
可以我不想要整张图片.我只想要部分的,就是我不想要最上面的...[/quote] 你看看你吧图片放到哪一个文件夹里面了。 如果你放在 xxhdpi文件夹里面的话,图片读出来会比真实的要小。有可能会出你列出来的那种错误。
ARy 2013-12-23
  • 打赏
  • 举报
回复
引用 1 楼 AA5279AA 的回复:
这个方法很坑爹的。 动不动就内存溢出。。 建议使用 Bitmap dragimg=Bitmap.createScaledBitmap(bmp, lockWidth, lockWidth, true); 方法 输入值分别是 被转换的图片对象 宽和高 最后一个参数是 是否保证等比
可以我不想要整张图片.我只想要部分的,就是我不想要最上面的...
失落夏天 版主 2013-12-23
  • 打赏
  • 举报
回复
这个方法很坑爹的。 动不动就内存溢出。。 建议使用 Bitmap dragimg=Bitmap.createScaledBitmap(bmp, lockWidth, lockWidth, true); 方法 输入值分别是 被转换的图片对象 宽和高 最后一个参数是 是否保证等比

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧