DXcam icon indicating copy to clipboard operation
DXcam copied to clipboard

numpy processor

Open ZCban opened this issue 3 months ago • 0 comments

def process(self, rect, width, height, region, rotation_angle):

pitch = int(rect.Pitch)
if rotation_angle in (0, 180):
    offset = (region[1] if rotation_angle == 0 else height - region[3]) * pitch
    height = region[3] - region[1]
else:
    offset = (region[0] if rotation_angle == 270 else width - region[2]) * pitch
    width = region[2] - region[0]


buffer = (ctypes.c_char * (pitch * height)).from_address(ctypes.addressof(rect.pBits.contents) + offset)
pitch = pitch // 4
if rotation_angle in (0, 180):
    image = np.ndarray((height, pitch, 4), dtype=np.uint8, buffer=buffer)
elif rotation_angle in (90, 270):
    image = np.ndarray((width, pitch, 4), dtype=np.uint8, buffer=buffer)


if rotation_angle == 90:
    image = np.rot90(image, axes=(1, 0))
elif rotation_angle == 180:
    image = np.rot90(image, k=2, axes=(0, 1))
elif rotation_angle == 270:
    image = np.rot90(image, axes=(0, 1))


if rotation_angle in (0, 180):
    image = image[region[1]:region[3], :width, :]
else:
    image = image[:height, region[0]:region[2], :]

# Convert the color of the cropped image only # reduce unnecessary CPU usage
if self.color_mode is not None:
    image = self.process_cvtcolor(image)

return image

ZCban avatar Apr 28 '24 10:04 ZCban