Во-первых, вы можете проверить: Преобразовать объект Leptonica Pix в QPixmap (или другой объект изображения)
Нам нужно найти общие форматы, которые поддерживают как Pix, так и UIImageпреобразуйте из Pix в этот общий формат, а затем преобразуйте из общего формата в UIImage.
Из библиотеки Leptonica видно, что общие поддерживаемые форматы: GIF, JPEG, TIFF, BMP и PNG,JPEG будет с потерями, а GIF и PNG приведут к дополнительной работе ЦП (будет дополнительный цикл кодирования / декодирования при преобразовании из Pix в UIImage).По этим причинам я выбрал TIFF в приведенном ниже примере.Если это не работает, я бы пошел с PNG.
План следующий:
- 1) Преобразовать из пикселя в байтовый буфер
- 2) Возьмите байтовый буфер и сохраните его в NSData
- 3) Передайте эти данные в NSImage
Похоже, функция pixWriteMem () - это то, что нам нужно для # 1 (при условииэта поддержка была скомпилирована в библиотеку).
Из примера кода, включенного в библиотеку, видно, что мы несем ответственность за освобождение вывода pixWriteMem () - следовательно, мы передадим YES вNSWata's freeWhenDone: аргумент.
Примерно так (предупреждение: непроверенный код):
UIImage *GetImageFromPix(Pix *thePix)
{
UIImage *result = nil;
l_uint8 *bytes = NULL;
size_t size = 0;
if (0 == pixWriteMem(&bytes, &size, thePix, IFF_TIFF)) {
NSData *data = [[NSData alloc] initWithBytesNoCopy:bytes length:(NSUInteger)size freeWhenDone:YES];
result = [UIImage imageWithData:data];
[data release];
}
return result;
}