def apply_filter_to_image(self, in_image):

		width = len(in_image[0])
		height = len(in_image)

		in_image_ctypes = image_data()
		out_image_ctypes = image_data()

		in_image_ctypes.width = ctypes.c_int16(width)
		in_image_ctypes.height = ctypes.c_int16(height)
		in_image_ctypes.data = ctypes.cast(
			ctypes.pointer((ctypes.c_int16 * (width * height))(*self.matrix_to_array(in_image))),
			ctypes.POINTER(ctypes.c_int16)
			)

		self.__apply_filter_to_image__(
			ctypes.pointer(in_image_ctypes),
			ctypes.pointer(out_image_ctypes),
			self.__filter_edge_detection__
			)

		return self.array_to_matrix(
			ctypes.cast(out_image_ctypes.data, ctypes.POINTER(ctypes.c_int16 * (width * height))).contents[:],
			width,
			height
			)
Beispiel #2
0
    def square_int_array(self, in_array):

        in_array_p = ctypes.cast(
            ctypes.pointer((ctypes.c_int16 * len(in_array))(*in_array)),
            ctypes.POINTER(ctypes.c_int16))
        out_array_p = ctypes.pointer(ctypes.c_void_p())

        self.__square_int_array__(in_array_p, out_array_p,
                                  ctypes.c_int16(len(in_array)))

        return ctypes.cast(out_array_p.contents,
                           ctypes.POINTER(ctypes.c_int16 *
                                          len(in_array))).contents[:]
    def gauss_elimination(self, A):

        N = 3
        if len(A) != N or len(A[0]) != N + 1:
            raise  # TODO

        x = [0 for eq in range(N)]
        _A = (ctypes.c_float * (N + 1) * N)(*(tuple(eq) for eq in A))
        _x = (ctypes.c_float * N)(*tuple(x))
        self.__gauss_elimination__(ctypes.pointer(_A), ctypes.pointer(_x))
        for index, eq in enumerate(A):
            eq[:] = _A[index][:]
        x[:] = _x[:]

        return x
    def bubblesort(self, values):

        ctypes_float_values = ((ctypes.c_float) * len(values))(*values)
        ctypes_float_pointer_firstelement = ctypes.cast(
            ctypes.pointer(ctypes_float_values),
            ctypes.POINTER(ctypes.c_float))
        self.__bubblesort__(ctypes_float_pointer_firstelement, len(values))
        values[:] = ctypes_float_values[:]
	def bubblesort_segments(self, values, number_of_segments, elements_per_segment):

		ctypes_float_values = ((ctypes.c_float)*len(values))(*values)
		ctypes_float_pointer_firstelement = ctypes.cast(
			ctypes.pointer(ctypes_float_values), ctypes.POINTER(ctypes.c_float)
			)
		self.__bubblesort_segments__(ctypes_float_pointer_firstelement, number_of_segments, elements_per_segment)
		values[:] = ctypes_float_values[:]
    def mix_rgb_colors(self, color_a, color_b):

        color_type = ctypes.c_ubyte * 3
        ctypes_color_a = color_type(*tuple(color_a))
        ctypes_color_b = color_type(*tuple(color_b))
        mixed_color = color_type()
        self.__mix_rgb_colors__(ctypes_color_a, ctypes_color_b,
                                ctypes.pointer(mixed_color))
        return mixed_color[:]
Beispiel #7
0
	def tag_string(self, in_string):

		in_buffer = ctypes.create_string_buffer(in_string.encode('utf-8'))
		out_buffer = ctypes.pointer(ctypes.c_void_p())

		self.__tag_string__(in_buffer, out_buffer)

		return ctypes.cast(
			out_buffer.contents,
			ctypes.POINTER(ctypes.c_char * (len(in_buffer) + 2))
			).contents[:].decode('utf-8').rstrip('\0')
Beispiel #8
0
    def square_int_array_with_struct(self, in_array):

        in_array_obj = int_array_data()
        out_array_obj = int_array_data()

        in_array_obj.data = ctypes.cast(
            ctypes.pointer((ctypes.c_int16 * len(in_array))(*in_array)),
            ctypes.POINTER(ctypes.c_int16))
        in_array_obj.len = len(in_array)

        self.__square_int_array_with_struct__(in_array_obj, out_array_obj)

        return ctypes.cast(out_array_obj.data,
                           ctypes.POINTER(ctypes.c_int16 *
                                          len(in_array))).contents[:]
    def vector3d_add_array(self, v):

        length = len(v)

        def dict_from_struct(in_struct):
            return {
                key: getattr(in_struct.contents, key)
                for key in ['x', 'y', 'z']
            }

        v_ctypes = (vector3d * length)()
        for i in range(length):
            for key in v[i].keys():
                setattr(v_ctypes[i], key, v[i][key])

        return dict_from_struct(
            self.__vector3d_add_array__(
                ctypes.cast(ctypes.pointer(v_ctypes),
                            ctypes.POINTER(vector3d)), length))