纹理和图像¶
DPG使用图形处理单元(GPU)来创建您所看到的图形用户界面(GUI)。要显示图像,必须首先使用图像数据创建纹理,然后可以将该纹理上载到GPU。这些纹理属于纹理注册表。
我们提供三种质地
静电
动态
生品
然后在以下应用程序项目中使用此纹理
mvDrawImage
mvImage
mvImageButton
mvImageSeries
它们始终是一维列表或数组。
在纹理注册表上使用关键字Show将打开纹理注册表。
静态纹理¶
静态纹理用于不经常更改的图像。它们通常在启动时加载。如果需要更新它们,您可以删除并重新创建它们。它们接受Python列表、元组、NumPy数组,以及支持具有连续数据的Python缓冲区协议的任何类型。下面是一个简单的例子
import dearpygui.dearpygui as dpg
dpg.create_context()
texture_data = []
for i in range(0, 100 * 100):
texture_data.append(255 / 255)
texture_data.append(0)
texture_data.append(255 / 255)
texture_data.append(255 / 255)
with dpg.texture_registry(show=True):
dpg.add_static_texture(width=100, height=100, default_value=texture_data, tag="texture_tag")
with dpg.window(label="Tutorial"):
dpg.add_image("texture_tag")
dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
可以使用以下命令删除纹理 dpg.delete_item("texture_tag") 。但是,对于要发布的标记/别名,使用 "texture_tag" (如剧情系列)也必须删除。
动态纹理¶
动态纹理用于每帧可以更改的中小型纹理。可以使用以下命令更新这些选项 set_value
但宽度和高度必须与第一次创建纹理时相同。除了执行安全检查和转化外,这些纹理与原始纹理相似。下面是一个简单的例子
import dearpygui.dearpygui as dpg
dpg.create_context()
texture_data = []
for i in range(0, 100 * 100):
texture_data.append(255 / 255)
texture_data.append(0)
texture_data.append(255 / 255)
texture_data.append(255 / 255)
with dpg.texture_registry(show=True):
dpg.add_dynamic_texture(width=100, height=100, default_value=texture_data, tag="texture_tag")
def _update_dynamic_textures(sender, app_data, user_data):
new_color = dpg.get_value(sender)
new_color[0] = new_color[0] / 255
new_color[1] = new_color[1] / 255
new_color[2] = new_color[2] / 255
new_color[3] = new_color[3] / 255
new_texture_data = []
for i in range(0, 100 * 100):
new_texture_data.append(new_color[0])
new_texture_data.append(new_color[1])
new_texture_data.append(new_color[2])
new_texture_data.append(new_color[3])
dpg.set_value("texture_tag", new_texture_data)
with dpg.window(label="Tutorial"):
dpg.add_image("texture_tag")
dpg.add_color_picker((255, 0, 255, 255), label="Texture",
no_side_preview=True, alpha_bar=True, width=200,
callback=_update_dynamic_textures)
dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
原始纹理¶
原始纹理的使用方式与动态纹理相同。主要区别是
只接受数组(NumPy、PYTHON等)
不执行任何安全检查。
这些纹理用于需要每帧更新大型纹理的高性能应用程序。下面是一个简单的例子
import dearpygui.dearpygui as dpg
import array
dpg.create_context()
texture_data = []
for i in range(0, 100 * 100):
texture_data.append(255 / 255)
texture_data.append(0)
texture_data.append(255 / 255)
texture_data.append(255 / 255)
raw_data = array.array('f', texture_data)
with dpg.texture_registry(show=True):
dpg.add_raw_texture(width=100, height=100, default_value=raw_data, format=dpg.mvFormat_Float_rgba, tag="texture_tag")
def update_dynamic_texture(sender, app_data, user_data):
new_color = dpg.get_value(sender)
new_color[0] = new_color[0] / 255
new_color[1] = new_color[1] / 255
new_color[2] = new_color[2] / 255
new_color[3] = new_color[3] / 255
for i in range(0, 100 * 100 * 4):
raw_data[i] = new_color[i % 4]
with dpg.window(label="Tutorial"):
dpg.add_image("texture_tag")
dpg.add_color_picker((255, 0, 255, 255), label="Texture",
no_side_preview=True, alpha_bar=True, width=200,
callback=update_dynamic_texture)
dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
格式¶
目前支持以下格式
格式化 |
静态纹理 |
动态纹理 |
原始纹理 |
---|---|---|---|
mvFormat_Float_rgba |
✅ |
✅ |
✅ |
mvFormat_Float_rgb |
✅* |
||
mvFormat_Int_rgba |
|||
mvFormat_Int_rgb |
备注
正在加载图像¶
DPG提供了该功能 load_image
用于从文件加载图像数据。
此函数返回一个元组,其中
0->宽度
1->高度
2->渠道
3->DATA(一维数组,mvBuffer)
如果失败,则返回 None 。
接受的文件类型包括:
JPEG(无12位/通道JPEG或采用算术编码的JPEG)
PNG
BMP
PSD
GIF
HDR
PIC
PPM
PGM
下面是一个简单的例子
import dearpygui.dearpygui as dpg
dpg.create_context()
width, height, channels, data = dpg.load_image("Somefile.png")
with dpg.texture_registry(show=True):
dpg.add_static_texture(width=width, height=height, default_value=data, tag="texture_tag")
with dpg.window(label="Tutorial"):
dpg.add_image("texture_tag")
dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
保存图像¶
1.4中的新功能 。DPG提供了该功能 save_image
用于将图像数据保存到文件。
该图像是从左到右、从上到下存储的像素的矩形。每个像素最多包含4个数据分量,每个通道8位交织,顺序如下:1=Y、2=YA、3=RGB、4=RGBA。(y表示单色。)
PNG创建的输出文件具有与输入相同数量的组件。BMP格式将文件格式中的Y扩展为RGB,并且不输出Alpha。
其他选项将在1.4.1版中发布。
接受的文件类型包括:
PNG
JPG(v1.4.1中的新功能)
BMP(v1.4.1中的新功能)
TGA(v1.4.1中的新功能)
HDR(v1.4.1中的新功能)
文件类型由扩展名决定。必须为小写(PNG、JPG、BMP、TGA、HDR)。
下面是一个简单的例子
import dearpygui.dearpygui as dpg
dpg.create_context()
dpg.create_viewport()
dpg.setup_dearpygui()
width, height = 255, 255
data = []
for i in range(width*height):
data.append(255)
data.append(255)
data.append(0)
with dpg.window(label="Tutorial"):
dpg.add_button(label="Save Image", callback=lambda:dpg.save_image(file="newImage.png", width=width, height=height, data=data, components=3))
dpg.show_viewport()
while dpg.is_dearpygui_running():
dpg.render_dearpygui_frame()
dpg.destroy_context()