Главная » 2026 » Январь » 10 » UImageRGB C API: преобразование в объект другого класса
16:23
UImageRGB C API: преобразование в объект другого класса

UImageRGB C API: преобразование в объект другого класса

В любой момент времени можно преобразовать объект UImageRGB в объект другого класса изображения.

Преобразование объекта UImageRGB в объект UImageGray и наоборот

Преобразовать объект UImageRGB в объект UImageGray позволяет функция uimagergb_to_gray(). Прототип функции:

int uimagergb_to_gray(unsigned char* parr_rgb, int arr_len_rgb,
                      unsigned char* parr_gray, int arr_len_gray);

Код описания параметров для Python:

_uimagergb_to_gray = _ulibc.uimagergb_to_gray
_uimagergb_to_gray.argtypes = [
   ctypes.POINTER(ctypes.c_ubyte), ctypes.c_int,
   ctypes.POINTER(ctypes.c_ubyte), ctypes.c_int]
_uimagergb_to_gray.restype = ctypes.c_int

Параметр parr_rgb является указателем, ссылающимся  на массив в формате RGB. Размер этого массива задается в параметре arr_len_rgb. Параметр parr_gray является указателем, ссылающимся на массив в который будет записано изображение в оттенках серого. Размер этого массива задается в параметр arr_len_gray. Вычисление производится по следующей формуле:

v = (int)round(r * 0.298912 + g * 0.586611 + b * 0.114478);

Функция возвращает значение 1 (UIMAGERGB_TRUE), если операция выполнена успешно. При ошибке возвращается значение -1 (UIMAGERGB_ERR). Пример:

_uimagergb_to_gray = _ulibc.uimagergb_to_gray
_uimagergb_to_gray.argtypes = [
   ctypes.POINTER(ctypes.c_ubyte), ctypes.c_int,
   ctypes.POINTER(ctypes.c_ubyte), ctypes.c_int]
_uimagergb_to_gray.restype = ctypes.c_int
w, h = 3, 2
arr = [255, 0, 0] * (w * h)
arr_rgb = (ctypes.c_ubyte * len(arr))(*arr)
print(arr_rgb._length_) # 18
arr_g = (ctypes.c_ubyte * (w * h))()
res = _uimagergb_to_gray(arr_rgb, arr_rgb._length_,
                         arr_g, arr_g._length_)
print(res)      # 1
print(arr_g[:]) # [76, 76, 76, 76, 76, 76]

Преобразовать объект UImageGray в объект UImageRGB позволяет функция uimagergb_from_gray(). Прототип функции:

int uimagergb_from_gray(unsigned char* parr_gray, int arr_len_gray,
                        unsigned char* parr_rgb, int arr_len_rgb);

Код описания параметров для Python:

_uimagergb_from_gray = _ulibc.uimagergb_from_gray
_uimagergb_from_gray.argtypes = [
   ctypes.POINTER(ctypes.c_ubyte), ctypes.c_int,
   ctypes.POINTER(ctypes.c_ubyte), ctypes.c_int]
_uimagergb_from_gray.restype = ctypes.c_int

Параметр parr_gray является указателем, ссылающимся  на массив изображения в оттенках серого. Размер этого массива задается в параметре arr_len_gray. Параметр parr_rgb является указателем, ссылающимся  на массив в который будет записано изображение RGB. Размер этого массива задается в параметр arr_len_rgb. Функция возвращает значение 1 (UIMAGERGB_TRUE), если операция выполнена успешно. При ошибке возвращается значение -1 (UIMAGERGB_ERR). Пример:

_uimagergb_from_gray = _ulibc.uimagergb_from_gray
_uimagergb_from_gray.argtypes = [
   ctypes.POINTER(ctypes.c_ubyte), ctypes.c_int,
   ctypes.POINTER(ctypes.c_ubyte), ctypes.c_int]
_uimagergb_from_gray.restype = ctypes.c_int
w, h = 3, 2
arr = [76] * (w * h)
arr_g = (ctypes.c_ubyte * len(arr))(*arr)
print(arr_g._length_)   # 6
arr_rgb = (ctypes.c_ubyte * (w * h * 3))()
print(arr_rgb._length_) # 18
res = _uimagergb_from_gray(arr_g, arr_g._length_,
                           arr_rgb, arr_rgb._length_)
print(res) # 1
print(arr_rgb[:])
# [76, 76, 76,   76, 76, 76,   76, 76, 76,
#  76, 76, 76,   76, 76, 76,   76, 76, 76]

Преобразование объекта UImage в объект UImageRGB и наоборот

Преобразовать объект UImage в объект UImageRGB позволяет функция uimagergb_from_rgba(). Прототип функции:

int uimagergb_from_rgba(unsigned char* parr_rgba, int arr_len_rgba,
                        unsigned char* parr_rgb, int arr_len_rgb);

Код описания параметров для Python:

_uimagergb_from_rgba = _ulibc.uimagergb_from_rgba
_uimagergb_from_rgba.argtypes = [
   ctypes.POINTER(ctypes.c_ubyte), ctypes.c_int,
   ctypes.POINTER(ctypes.c_ubyte), ctypes.c_int]
_uimagergb_from_rgba.restype = ctypes.c_int

Параметр parr_rgba является указателем, ссылающимся  на массив в формате RGBA. Размер этого массива задается в параметре arr_len_rgba. Параметр parr_rgb является указателем, ссылающимся на массив в который будет записано изображение в формате RGB. Размер этого массива задается в параметр arr_len_rgb. Альфа-канал просто отбрасывается. Функция возвращает значение 1 (UIMAGERGB_TRUE), если операция выполнена успешно. При ошибке возвращается значение -1 (UIMAGERGB_ERR). Пример:

_uimagergb_from_rgba = _ulibc.uimagergb_from_rgba
_uimagergb_from_rgba.argtypes = [
   ctypes.POINTER(ctypes.c_ubyte), ctypes.c_int,
   ctypes.POINTER(ctypes.c_ubyte), ctypes.c_int]
_uimagergb_from_rgba.restype = ctypes.c_int
w, h = 3, 2
arr = [255, 0, 0, 255] * (w * h)
arr_rgba = (ctypes.c_ubyte * len(arr))(*arr)
print(arr_rgba._length_) # 24
arr_rgb = (ctypes.c_ubyte * (w * h * 3))()
print(arr_rgb._length_)  # 18
res = _uimagergb_from_rgba(arr_rgba, arr_rgba._length_,
                           arr_rgb, arr_rgb._length_)
print(res) # 1
print(arr_rgb[:])
# [255, 0, 0,   255, 0, 0,   255, 0, 0,
#  255, 0, 0,   255, 0, 0,   255, 0, 0]

Преобразовать объект UImageRGB в объект UImage позволяет функция uimagergb_to_rgba(). Прототип функции:

int uimagergb_to_rgba(unsigned char* parr_rgb, int arr_len_rgb,
                      unsigned char* parr_rgba, int arr_len_rgba);

Код описания параметров для Python:

_uimagergb_to_rgba = _ulibc.uimagergb_to_rgba
_uimagergb_to_rgba.argtypes = [
   ctypes.POINTER(ctypes.c_ubyte), ctypes.c_int,
   ctypes.POINTER(ctypes.c_ubyte), ctypes.c_int]
_uimagergb_to_rgba.restype = ctypes.c_int

Параметр parr_rgb является указателем, ссылающимся  на массив изображения в формате RGB. Размер этого массива задается в параметре arr_len_rgb. Параметр parr_rgba является указателем, ссылающимся на массив в который будет записано изображение RGBA. Размер этого массива задается в параметр arr_len_rgba. Альфа-канал получит значение 255. Функция возвращает значение 1 (UIMAGERGB_TRUE), если операция выполнена успешно. При ошибке возвращается значение -1 (UIMAGERGB_ERR). Пример:

_uimagergb_to_rgba = _ulibc.uimagergb_to_rgba
_uimagergb_to_rgba.argtypes = [
   ctypes.POINTER(ctypes.c_ubyte), ctypes.c_int,
   ctypes.POINTER(ctypes.c_ubyte), ctypes.c_int]
_uimagergb_to_rgba.restype = ctypes.c_int
w, h = 3, 2
arr = [255, 128, 0] * (w * h)
arr_rgb = (ctypes.c_ubyte * len(arr))(*arr)
print(arr_rgb._length_)  # 18
arr_rgba = (ctypes.c_ubyte * (w * h * 4))()
print(arr_rgba._length_) # 24
res = _uimagergb_to_rgba(arr_rgb, arr_rgb._length_,
                         arr_rgba, arr_rgba._length_)
print(res) # 1
print(arr_rgba[:])
# [255, 128, 0, 255,   255, 128, 0, 255,   255, 128, 0, 255,
#  255, 128, 0, 255,   255, 128, 0, 255,   255, 128, 0, 255]

Класс входит в состав графической библиотеки UImageC. Описание библиотеки UImageC

Категория: UImage C | Просмотров: 5 | Добавил: unicross | Теги: UImageRGB | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Категории раздела
Списки слов [10]
Списки слов и словари
OCR [4]
Оптическое распознавание символов
UImage [80]
Графическая библиотека для Python
UImage C [7]
Графическая библиотека для Python
Программы [4]
Полезные программы
Прочее [3]
Другие темы
Календарь
«  Январь 2026  »
Пн Вт Ср Чт Пт Сб Вс
   1234
567891011
12131415161718
19202122232425
262728293031