in src/spg_icvfxpatterns/PatternGenerators/referenceImage.py [0:0]
def generator(cls, frame, kwargs, results):
""" The method which creates the checkerboard images based on the kwargs provided
:param frame: the frame number we are generating
:param kwargs: a dictionary of the arguments for the generator
:param results: a dictionary to store the results
"""
led_wall = kwargs.get("led_wall", None)
if led_wall is None:
raise ValueError("led_wall not found in kwargs")
frame_num, full_file_path = cls.get_frame_num_and_file_path(frame, led_wall.name)
led_wall_image = cls.create_solid_color_image(
led_wall.resolution_width, led_wall.resolution_height
)
wall_width_scaled = led_wall.resolution_width * cls.image_scale
wall_height_scaled = led_wall.resolution_height * cls.image_scale
reference_image = oiio.ImageBuf(cls.reference_filepath)
spec = reference_image.spec()
scale_factor = 1.0
if reference_image.xmax > wall_width_scaled:
scale_factor = reference_image.xmax/wall_width_scaled
new_width = int(reference_image.xmax/scale_factor)
new_height = int(reference_image.ymax / scale_factor)
if new_height > wall_height_scaled:
scale_factor = reference_image.ymax/wall_height_scaled
new_width = int(reference_image.xmax / scale_factor)
new_height = int(reference_image.ymax / scale_factor)
y_centre = int((led_wall.resolution_height - new_height) * 0.5)
x_centre = int((led_wall.resolution_width - new_width) * 0.5)
resized = oiio.ImageBuf(oiio.ImageSpec(new_width, new_height, spec.nchannels, spec.format))
oiio.ImageBufAlgo.resize(resized, reference_image)
oiio.ImageBufAlgo.paste(
led_wall_image, x_centre, y_centre, 0, 0, resized, roi=oiio.ROI.All
)
# Write the image to disk and store the result
cls.write_image_and_store_result(
frame_num, full_file_path, led_wall.name, led_wall_image, results
)