Как изменить размеры изображения в dearpygui?

Рейтинг: 1Ответов: 1Опубликовано: 17.06.2023

Есть вот такой кусок кода:

 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))    

введите сюда описание изображения