PNG над JPEG (эффект водяного знака) плохого качества? - PullRequest
5 голосов
/ 02 ноября 2011

Привет, у меня есть два Writablebitmap, одно из jpg и другое из png, и я использую этот метод для смешивания цветов в цикле:

private static Color Mix(Color from, Color to, float percent)
{
    float amountFrom = 1.0f - percent;
    return Color.FromArgb(
        (byte)(from.A * amountFrom + to.A * percent),
        (byte)(from.R * amountFrom + to.R * percent),
        (byte)(from.G * amountFrom + to.G * percent),
        (byte)(from.B * amountFrom + to.B * percent));
}

Моя проблема в альфа-канале, мой результат эффекта водяного знака плохой (качество)!

Result

Это оригинальный png.

Original Pgn

Это оригинальный jpg.

Original Jpg

Любая помощь?

1 Ответ

5 голосов
/ 02 ноября 2011

В этом случае вы, вероятно, не хотите, чтобы результат брал какую-либо альфу с водяного знака, вы хотите, чтобы он сохранял 100% непрозрачности JPEG. Вместо установки новой альфы на from.A * amountFrom + to.A * percent, просто используйте from.A.

Редактировать: Кроме того, вы хотите настроить percent в соответствии с альфа PNG. Вот ваш образец, обновленный:

private static Color Mix(Color from, Color to, float percent) 
{
    float amountTo = percent * to.A / 255.0;
    float amountFrom = 1.0f - amountTo; 
    return Color.FromArgb( 
        from.A, 
        (byte)(from.R * amountFrom + to.R * amountTo), 
        (byte)(from.G * amountFrom + to.G * amountTo), 
        (byte)(from.B * amountFrom + to.B * amountTo)); 
}

Я преобразовал этот код в Python и пропустил ваши образцы изображений с 0,5%, вот результат:

enter image description here

...