关于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(),这个肯定超过了...

所以我觉得她这个方法的计算方式有问题

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

时间: 2024-10-23 18:29:30

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

使用Bitmap createBitmap遇到的问题

public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter) 在使用这个方法进行图片缩放裁剪时,x,y的意思理解错误,导致结果不是我想要的效果. 这里的x,y的值在源代码中有说明,但是我没有注意,应该是获取源bitmap中的坐标. 还有x+width要小于或等于source.getWidth(),y+height要小于或等于source

Android图片旋转,缩放,位移,倾斜,对称完整示例(二)——Bitmap.createBitmap()和Matrix

MainActivity如下: package cc.c; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.widget.ImageView; /** * Demo描述: * 利用B

Android -- 重置Bitmap大小&amp;&amp;Bitmap转角度

重置Bitmap大小                                                                           Bitmap bitMap = BitmapFactory.decodeFile(path); int width = bitMap.getWidth(); int height = bitMap.getHeight(); // 设置想要的大小 int newWidth = 500; int newHeight = 400; /

Source not found for $$FastClassByCGLIB$$99fffb3.invoke(int, Object, Object[]) line: not available

今天在写一个修改语句的时候,竟然报了: Source not found for TsOrderErrorDaoImpl$$FastClassByCGLIB$$99fffb3.invoke(int, Object, Object[]) line: not available这么一个错,上网查了资料,有的说是SQL语句的问题,但是我把语句放到数据库运行没问题,还有说tomcat的问题,这些都排除了, 只好又回头看写的代码,发现有几句代码是这样写的 JdbcTemplate myTemplate=

void f(int(&amp;p)[3]){} 和void f(int(*p)[3]){}的区别

#include<iostream> using namespace std; void f(int(&p)[3]){ cout<<p[0]<<endl; cout<<p[2]<<endl; } int main(){ int a1[3]={1,2,3}; cout<<a1<<endl; cout<<&a1<<endl; f(a1); } 编译后输出: 0xbfbb8eb4 0xbf

C#中(int)、Conver.Toint32()、int.Parse()三种类型转换方式的区别与联系--C#基础知识

自己也是刚学习C#程序设计语言,总结了一点知识点,想分享给大家.毕竟刚学习这门语言,学得不深,哪里如果有错误,请帮个忙指出一下哈,谢谢! 1.(int)可用于单精度.双精度等其他数值类型的转换(到整型int),不能用于转换string类型,例如: 这里用(int)转换string是不可以的,系统会报错,程序是不能运行. using System.Collections.Generic; using System.Linq; using System.Text; using System.Thre

解决warning: format ‘%x’ expects type ‘unsigned int’, but argument 2 has type ‘int *’

[[email protected] c]# gcc MemTest.c -o MemTest1 -WallMemTest.c: In function 'main':MemTest.c:24: warning: format '%x' expects type 'unsigned int', but argument 2 has type 'int *'MemTest.c:39: warning: format '%x' expects type 'unsigned int', but arg

C++中int转string与string转int

#include "stdafx.h" #include "string" #include "iostream" #include "vector" #include "sstream" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { //string 转 int stringstream ss; string str; int i;

&quot;int?&quot; 是什么类型?和&quot;int&quot;有何区别

int?:表示可空类型,就是一种特殊的值类型,它的值可以为null用于给变量设初值得时候,给变量(int类型)赋值为null,而不是0int??:用于判断并赋值,先判断当前变量是否为null,如果是就可以赋役个新值,否则跳过public int? a=null:public int b(){return this.a ?? 0;} 值类型后面加问号表示可为空null(Nullable 结构) Nullable是.NET 2.0中新提供的一种用于标明一个值类型是否可以为空的技术. 对于一个类型,如