Код: Выделить всё
'libavif'
Вот поведение avif и avif-alpha .
Изображение с avif-alpha:

Изображение с avif:

Итак здесь есть контуры в avif-alpha.
вот код, который я использую, получил avif-alpha и avif:
Код: Выделить всё
IgcBufBase::Ptr IsrvImageRects::CreateAvifImage(IrsRasConst ras, int /* format */, int ippEncoding, int quality, bool doAlpha, size_t * length)
{
IrsRas avifRas = CreateRasForAvif(ras, doAlpha);
int depth = 8;
int height = avifRas.rect().ht();
int width = avifRas.rect().wd();
avifPixelFormat format = AVIF_PIXEL_FORMAT_YUV420;
IrsTAccessConst pixels(avifRas);
avifRGBImage rgb;
avifImage * image = avifImageCreate(width, height, depth, format);
avifRGBImageSetDefaults(&rgb, image);
image->colorPrimaries = AVIF_COLOR_PRIMARIES_BT709;
image->transferCharacteristics = AVIF_TRANSFER_CHARACTERISTICS_SRGB;
image->matrixCoefficients = AVIF_MATRIX_COEFFICIENTS_BT601;
rgb.pixels=(uint8_t*) pixels.ptr();
rgb.rowBytes=avifRas.numComps() * avifRas.rect().wd();
if (avifRas.numComps() == 4) {
rgb.format = AVIF_RGB_FORMAT_RGBA;
} else {
rgb.format = AVIF_RGB_FORMAT_RGB;
}
if (avifImageRGBToYUV(image, &rgb) != AVIF_RESULT_OK) {
avifImageDestroy(image);
throw new IgcEx_Unsupported("AVIF format - Problem in RGB(A) to YUV conversion", IGC_WHERE);
}
avifRWData encodedData = AVIF_DATA_EMPTY;
avifEncoder * encoder = NULL;
encoder = avifEncoderCreate();
encoder->codecChoice=AVIF_CODEC_CHOICE_AUTO;
encoder->maxThreads = 2;
encoder->speed = 8;
encoder->quality = quality;
if ( avifEncoderWrite(encoder, image, &encodedData) != AVIF_RESULT_OK) {
avifEncoderDestroy(encoder);
avifImageDestroy(image);
throw new IgcEx_Unsupported("AVIF format - Encoding Failed", IGC_WHERE);
}
avifEncoderDestroy(encoder);
avifImageDestroy(image);
IgcBufSpec spec(encodedData.size);
IgcBufBase::Ptr buf = IgcBufBase::Create(spec);
memcpy(buf->buf(), encodedData.data,encodedData.size);
*length = encodedData.size;
avifRWDataFree(&encodedData);
return buf;
}
Заранее спасибо, будем признательны.
Я пробовал другие варианты, предоставленные в библиотеке (libavif), которую я использую, но безуспешно.
Подробнее здесь: https://stackoverflow.com/questions/785 ... r-avif-ima