Вот моя дилемма: мне нужны изображения в формате RGBA RAW: основное изображение (первое) и дорожка субтитров (второе), и я хочу наложить их таким образом, чтобы они основывались на альфа-канале второго изображения: если он равен нулю, затем возьмите пиксели из второго изображения, если это 0xFF, возьмите пиксели из первого изображения, в противном случае создайте наложение второго изображения на первое. Вот код, используемый для этого:
if(frame->bytes[pc + 3] == 0xFF) /* this is NO transparency in the overlay image, meaning: take over the overlay 100% */
{
pFrameRGB->data[0][pc] = frame->bytes[pc]; // Red
pFrameRGB->data[0][pc+1] = frame->bytes[pc+1];// Green
pFrameRGB->data[0][pc+2] = frame->bytes[pc+2];// Blue
}
else
if(frame->bytes[pc + 3] != 0) /* this is full transparency in the overlay image, meaning: take over the image 100% */
{
pFrameRGB->data[0][pc] |= frame->bytes[pc]; // Red
pFrameRGB->data[0][pc+1] |= frame->bytes[pc+1];// Green
pFrameRGB->data[0][pc+2] |= frame->bytes[pc+2];// Blue
pFrameRGB->data[0][pc+3] = frame->bytes[pc+3]; // Alpha
}
В приведенном выше коде pFrameRGB - это целевое изображение RGBA, уже содержащее какое-то изображение, frame-> bytes - это изображение "наложения / субтитры" ... И вот мой вопрос: с некоторыми красочными изображениями наложения / субтитров место назначения тоже красочный ... так что это не похоже на наложение изображения субтитров, какой эффект я хочу получить, но вы можете видеть весь диапазон цветов (например: у меня есть красное / зеленое наложенное изображение с увеличивающимся альфа-каналом, и я бы хотел, чтобы наложение изображение должно выглядеть как «бледный» красно-зеленый оверлей с изображением под ним, однако с подходом, описанным выше, я получаю много разноцветных пикселей на изображении ниже). Есть ли у вас какой-то лучший подход к этому?
Спасибо fritzone