width and height must be > 0

本文解决了一个在设置Bitmap时遇到的错误,原因是未能正确测量图片的大小。通过从本地加载一张图片并使用其宽度和高度作为参数,成功解决了此问题。

在设置Bitmap时报这个错,原因大概是没找测量到图片的大小

Bitmap bitmap = ZXingUtils.createQRImage(homestayDetailBean.getOpen_url(),open_url.getWidth(), open_url.getHeight());
        if(null != bitmap) open_url.setImageBitmap(bitmap);

上面一直报错,我先从本地加载一张图片就ok了

Bitmap bitmap1=((BitmapDrawable)activity.getResources().getDrawable(R.drawable.open_add)).getBitmap();
        Bitmap bitmap = ZXingUtils.createQRImage(homestayDetailBean.getOpen_url(), bitmap1.getWidth(), bitmap1.getHeight();
        if(null != bitmap) open_url.setImageBitmap(bitmap);

 

<think>我们正在处理一个关于matplotlib报错的问题:ValueError: height and width must be > 0。 根据引用[1],这个错误通常发生在没有物理屏幕的环境下,比如远程服务器或虚拟环境中。matplotlib在尝试显示图形时,需要检测到可用的物理屏幕,否则会抛出这个错误。 解决方案有两种: 1. 如果是在有物理屏幕的计算机上,确保显示器设置为单屏显示(例如Ubuntu系统下调整显示设置)。 2. 如果是在没有物理屏幕的服务器上,我们需要修改代码,不使用plt.show(),而是将图形保存为图片文件。同时,在导入matplotlib后,需要设置其使用非交互式后端(如'Agg')。 具体修改步骤: - 导入matplotlib后,立即设置后端:`matplotlib.use('Agg')` - 将`plt.show()`替换为`plt.savefig('文件路径')` 例如,原始代码: import matplotlib.pyplot as plt x = [1,2,3,4,5] y = [1,4,9,16,25] plt.plot(x, y) plt.show() 修改后的代码: import matplotlib.pyplot as plt import matplotlib matplotlib.use('Agg') # 在导入pyplot之前设置后端 x = [1,2,3,4,5] y = [1,4,9,16,25] plt.plot(x, y) plt.savefig('./test.jpg') # 保存为图片,而不是显示 注意:设置后端(`matplotlib.use`)必须在导入`pyplot`之前进行,否则可能无效。 另外,根据其他引用,我们也看到类似的错误可能由其他原因引起,但根据用户的问题描述,我们主要关注引用[1]中提供的解决方案。 如果用户是在本地有物理屏幕的环境下运行,但依然出现此错误,可能需要检查显示设置或图形驱动等问题。但根据引用[1],远程软件自动分配虚拟屏幕导致没有物理屏幕是常见原因。 因此,针对用户的问题,我们提供上述解决方案。</think>### 解决 `ValueError: height and width must be > 0` 错误的方法 该错误通常发生在 **Matplotlib 无法检测到有效物理屏幕**的环境中,常见于远程服务器、虚拟环境或无物理显示器的场景。以下是具体解决方案: #### 1. **无物理屏幕的服务器/远程环境** ```python import matplotlib matplotlib.use('Agg') # ⚠️ 必须在导入 plt 前设置 import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [1, 4, 9, 16, 25] plt.plot(x, y) plt.savefig('output.jpg') # 替换 plt.show() ``` - **关键步骤**: - 使用 `matplotlib.use('Agg')` 切换到非交互式后端 - 用 `plt.savefig()` 替代 `plt.show()` 保存图像 - 确保设置代码在导入 `plt` **之前**执行[^1] #### 2. **有物理屏幕的本地环境** - **Ubuntu/Linux 系统**: ```bash sudo apt install xvfb # 安装虚拟显示缓冲器 Xvfb :99 -screen 0 1024x768x24 & # 启动虚拟显示 export DISPLAY=:99 # 设置环境变量 ``` - **Windows/macOS**: - 检查显示设置:确保主显示器已启用(单屏模式) - 更新显卡驱动和 Matplotlib 版本 #### 3. **其他可能原因** - **张量操作错误**:检查 `strides` 等参数是否含非整数(如 `1/2` 应改为 `2`) ```python # 错误示例(会引发类似错误) strides = [1, 1/2, 1/2, 1] # ❌ 必须为整数 # 正确写法 strides = [1, 2, 2, 1] # ✅ ``` - **维度不匹配**:验证输入数据的形状是否合法(如引用[3]中的维度冲突) #### 验证方案 ```python import matplotlib print("当前后端:", matplotlib.get_backend()) # 检查后端类型 print("屏幕尺寸:", plt.gcf().get_size_inches()) # 检查画布尺寸 ``` > **根本原因**:Matplotlib 默认使用交互式后端(如 `TkAgg`),当系统无物理屏幕时,无法获取有效画布尺寸导致此错误[^1]。 --- ### 相关问题 1. 如何在不支持图形界面的服务器上批量保存 Matplotlib 图表? 2. Seaborn 绘图出现 `ValueError` 时如何排查维度不匹配问题? 3. 如何在 Docker 容器中正确配置 Matplotlib 避免显示错误? 4. TensorFlow/Keras 模型可视化时遇到 `strides` 参数错误该如何解决?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值