Advertisement
Guest User

Untitled

a guest
Feb 25th, 2022
393
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.53 KB | None | 0 0
  1. import dearpygui.dearpygui as dpg
  2. import cv2 as cv
  3. import numpy as np
  4.  
  5. def flat_img(mat):
  6.     return np.true_divide(np.asfarray(np.ravel(np.flip(mat,2)), dtype='f'), 255.0)
  7.  
  8. #full size image
  9. _img = cv.imread('./test.jpg')
  10.  
  11.  
  12. _imgdata = flat_img(_img)
  13. #window scaled image
  14. img = _img.copy()
  15. imgdata = _imgdata.copy()
  16.  
  17. win_dimensions = [800,500]
  18. tag_n = 0
  19.  
  20. #updating a texture with new dimension
  21. def resize_window_img(tag, dimensions, _img, flat):
  22.     img_dim = np.flip(_img.shape[:-1])
  23.     scale = 1
  24.     if (dimensions[0] >= dimensions[1]):
  25.         scale = dimensions[0]/img_dim[0]
  26.     else: scale = dimensions[1]/img_dim[1]
  27.     img_dim[0]*=scale
  28.     img_dim[1]*=scale
  29.  
  30.     global img
  31.     global imgdata
  32.     img = cv.resize(_img, img_dim)
  33.     imgdata = flat_img(img)
  34.     # delete window, add new texture+tag to registry, re-add window
  35.     # dpg.delete_item(tag)
  36.     with dpg.texture_registry(show=False):
  37.         global tag_n   
  38.         tag_n +=1
  39.         tex_tag = "texture_tag"+str(tag_n)
  40.         dpg.configure_item(img.shape[1], img.shape[0], imgdata, tag=tex_tag, format=dpg.mvFormat_Float_rgb)
  41.     with dpg.window(tag="imgwindow"):
  42.         dpg.add_image(tex_tag)
  43.         dpg.set_primary_window("imgwindow", True)
  44.  
  45. def handle_float(sender, data):
  46.     dpg.set_value("texture_tag"+str(tag_n), np.multiply(imgdata, data))
  47.  
  48. def afteredit_cb(sender, data):
  49.     f = dpg.get_value(data)
  50.     # print(f"{f}, {data}")
  51.  
  52. def viewport_resize_cb(sender, data):
  53.     win_dimensions[0] = data[2:][0]
  54.     win_dimensions[1] = data[2:][1]
  55.  
  56. def resize_button_cb(sender, data):
  57.     resize_window_img("imgwindow", win_dimensions, _img, _imgdata)
  58.  
  59. dpg.create_context()
  60. dpg.create_viewport(title='img gui', width=win_dimensions[0], height=win_dimensions[1])
  61.  
  62. with dpg.item_handler_registry(tag="float handler") as handler:
  63.     dpg.add_item_deactivated_after_edit_handler(callback=afteredit_cb)
  64.  
  65. with dpg.texture_registry(show=False)
  66.     dpg.add_raw_texture(img.shape[1], img.shape[0], imgdata, tag="texture_tag"+str(tag_n), format=dpg.mvFormat_Float_rgb)
  67.  
  68. with dpg.window(tag="ctlnwindow", label="img", no_close=True):
  69.     dpg.add_slider_float(label="float", tag="fbar", default_value=0., max_value=1, callback=handle_float)
  70.     dpg.add_button(label="fit image to window", tag="resizebutton", callback=resize_button_cb)
  71.  
  72. with dpg.window(tag="imgwindow"):
  73.     dpg.add_image("texture_tag"+str(tag_n))
  74.     dpg.set_primary_window("imgwindow", True)
  75.  
  76. dpg.setup_dearpygui()
  77. dpg.show_viewport()
  78. dpg.bind_item_handler_registry("fbar", "float handler")
  79. dpg.set_viewport_resize_callback(viewport_resize_cb)
  80. dpg.start_dearpygui()
  81. dpg.destroy_context()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement