IllegalArgumentException: width and height must be gt; 0 while loading Bitmap from View(IllegalArgumentException:宽度和高度必须是 gt;0 从视图加载位图时)
问题描述
我正在尝试在 ImageViewTouch 上绘图,这是一个启用捏缩放的库.我可以使用 Canvas 在图像上绘图,但是当我缩放图像时,绘图消失了.
I'm trying to draw on an ImageViewTouch, a library which enables pinch zooming. I'm able to draw over the image using Canvas, but when I zoom the image, the drawing disappears.
为此,我正在尝试将视图转换为位图并为同一视图设置 theImageBitmap.代码如下:
For this, I'm trying to convert the view to a bitmap and set theImageBitmap for this same view. Here's the code:
mImage.setDrawPath(true);
mImage.setImageBitmap(loadBitmapFromView(mImage));
public static Bitmap loadBitmapFromView(View v) {
Bitmap b = Bitmap.createBitmap( v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.layout(0, 0, v.getWidth(), v.getHeight());
v.draw(c);
return b;
}
当我这样做时,我收到以下日志错误:
When I do this, I get the following log error:
07-11 21:13:41.567: E/AndroidRuntime(20056): java.lang.IllegalArgumentException: width and height must be > 0
07-11 21:13:41.567: E/AndroidRuntime(20056): at android.graphics.Bitmap.createBitmap(Bitmap.java:638)
07-11 21:13:41.567: E/AndroidRuntime(20056): at android.graphics.Bitmap.createBitmap(Bitmap.java:620)
如果我删除 loadBitmapFromView
调用,绘图通常会出现在图像上.当我尝试与图像进行任何交互(如放大或缩小)时,绘图会消失,只保留背景图像,即图片.
If I remove the loadBitmapFromView
call the drawing normally appears over the image. When I try to do any interaction with the image (like zooming in or out), the drawing disappears, remaing only the background image, which is a picture.
--- 编辑 ---
这是在 loadBitmapFromView
调用之后放置的更多代码.情况是:我有一个广播组监听器,当我检查一些单选按钮时,我必须加载图像并在其上绘制一些可能的图纸.然后我试图将所有内容(图像和图纸)转换为一张位图.
Here's some more code placed after the loadBitmapFromView
call. The case is: I have a radio group listenner and when I check some radio button, I have to load the image and draw some possibles drawings over it.. then I'm trying to convert everything (the image and the drawings) into only one bitmap.
这是代码的其他部分:
bitmap = BitmapUtils.decodeSampledBitmapFromResource(root + DefinesAndroid.CAMINHO_SHOPPINGS_SDCARD + nomeImagemAtual, size.x, size.y);
mImage.setImageBitmap(bitmap);
之后,我绘制了我必须绘制的所有内容,并尝试使用我展示的 loadImageBitmap 方法将视图转换为位图.
After that, I draw everything I have to draw and try to convert the view to bitmap using the loadImageBitmap method I have shown.
decodeSampledBitmapFromResource
方法我从这个关于 android 开发者的链接 http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
the decodeSampledBitmapFromResource
method I got from this link on android developers http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
推荐答案
我终于找到了解决问题的办法.
I finally figured out a solution for my problem.
我用的是View的post
方法,只有在view测量布局后才会执行,这样getWidth()
和getHeight()
返回实际的宽度和高度.
I'm using the post
method of the View, which will be executed only after the view measuring and layouting, this way getWidth()
and getHeight()
returns the actual width and height.
这是代码示例:
mImage.post(new Runnable() {
@Override
public void run() {
mImage.setImageBitmap(loadBitmapFromView(mImage));
}
});
希望它也对其他人有所帮助:)
Hope it also helps someone else :)
这篇关于IllegalArgumentException:宽度和高度必须是 >0 从视图加载位图时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:IllegalArgumentException:宽度和高度必须是 >0 从视图加载位图时
基础教程推荐
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01