Как изменить размеры изображения в dearpygui?
Есть вот такой кусок кода:
with dpg.texture_registry():
width, height, _, data = dpg.load_image('image_path')
dpg.add_static_texture(width=width, height=height, default_value=data)
dpg.add_image(texture_tag=movie['id'])
Он корректно отрабатывает, но изображение вставляется по исходным размерам. Если же попробовать "наживую" указать размеры изображения -
with dpg.texture_registry():
width, height, _, data = dpg.load_image('image_path')
dpg.add_static_texture(width=100, height=200, default_value=data)
dpg.add_image(texture_tag=movie['id'])
получится каша (прикрепляю скриншот)
Как поменять размеры изображения?
Ответы (1 шт):
Для того чтобы изображение корректно отображалось нужно чтобы сохранялись пропорции ширины и высоты с которыми была добавлена текстура(там должны быть оригинальные размеры),
а изменять размеры можно уже при добавлении виджета:
with dpg.texture_registry(show=True):
width, height, _, data = dpg.load_image('image_path')
dpg.add_static_texture(width=width, height=height, default_value=data, tag="texture_tag")
with dpg.window(label="Tutorial"):
width, height = dpg.get_item_width("texture_tag"), dpg.get_item_height("texture_tag")
scale = .5
dpg.add_image("texture_tag", width=width * scale, height=height * scale )
Дополнение:
В случае когда нужно использовать только часть изображения или сжать его под определенный размер без искажений (в виде линий) или даже зеркально отобразить, можно использовать drawlist и в нем уже отрисовать draw_image задав ему нужное положение, первый параметр указывает координаты левого верхнего угла где он будет отрисован, второй — координаты правого нижнего угла, третий и четвертый указывают в диапазоне от 0 до 1 координаты части изображения которую нужно отрисовать (uv_min — левый верхний угол, uv_max — правый нижний)
Вот пример отрисовывающий все изображение в заданных Вами размерах.
with dpg.window(label="Tutorial"):
with dpg.drawlist(width=100, height=200):
dpg.draw_image("texture_tag", (0, 0), (100, 200), uv_min=(0, 0), uv_max=(1, 1))


