使用dear pygui 写一个bmp图片展示窗(允许滚动条上下滚动查看大图片),另该点击展示窗中的图片的demo
时间: 2023-05-28 13:02:34 浏览: 190
滚动效果的图片demo
由于bmp图片展示窗需要调用图像处理库,因此这里我们选择OpenCV作为示例。本示例会展示如何创建一个GUI窗口,打开并显示一张bmp图片,并且支持滚动条查看大图片,同时提供了一个点击图片的demo。
首先需要安装OpenCV和dearpygui库,可以使用pip进行安装:
```
pip install opencv-python
pip install dearpygui
```
以下是代码实现:
```python
import cv2
from dearpygui.core import *
from dearpygui.simple import *
# 读取图片文件
img_file = "test.bmp"
img = cv2.imread(img_file)
# 设置展示窗口大小为800x600
# 如果图片比窗口大,则会出现滚动条使用户可以查看整张图片
set_main_window_size(800, 600)
def draw_image(sender, data):
# 计算图片的缩放比例,以适应窗口大小
window_size = get_window_size("Image Viewer")
height, width = img.shape[:2]
scale_ratio = min([window_size[0]/height, window_size[1]/width])
scaled_img = cv2.resize(img, None, fx=scale_ratio, fy=scale_ratio, interpolation=cv2.INTER_AREA)
# 在展示窗口上绘制图片
with draw_image_context("Image Viewer", width, height):
draw_image_texture("Image Viewer", (0, 0), scaled_img)
def handle_click(sender, data):
# 显示当前鼠标点击的位置
print("clicked at: ", get_mouse_pos())
# 创建主窗口
with window("Image Viewer"):
# 设置滚动条参数
set_scrollbar("##scrollbar1", 100, img.shape[0], 400, 500)
set_scrollbar("##scrollbar2", 100, img.shape[1], 400, 500)
# 绑定滚动条回调函数,以便用户可以查看整张图片
add_same_line(spacing=10)
add_text("Vertical")
add_same_line(spacing=10)
add_scrollbar("##scrollbar1", callback=draw_image)
add_same_line(spacing=10)
add_text("Horizontal")
add_same_line(spacing=10)
add_scrollbar("##scrollbar2", callback=draw_image)
# 设置点击事件回调函数
set_mouse_click_callback("Image Viewer", handle_click)
# 绘制初始图片
draw_image(None, None)
# 显示GUI窗口
start_dearpygui()
```
运行以上代码,将会展示名为"Image Viewer"的GUI窗口,用于展示test.bmp文件中的图片。用户可以通过滚动条上下滚动查看整张图片,并且可以点击窗口中的图片进行处理。
注意:因为OpenCV会以BGR顺序解码bmp图片,而DearPyGui需要RGB顺序,因此在本示例中我们没有对BGR顺序进行任何处理,实际使用中可能需要调整图片顺序。
也可以选择使用Pillow库来读取bmp图像,需要修改上述代码片段,添加以下这行代码进行bmp文件的读取:
```python
from PIL import Image
img_pil = Image.open(img_file)
img = cv2.cvtColor(np.array(img_pil), cv2.COLOR_RGB2BGR)
```
阅读全文