5 votes

Png sur jpeg (effet de tache d'eau) mauvaise qualité ?

Bonjour, j'ai deux Writablebitmap, l'un en jpg et l'autre en png et j'utilise cette méthode pour mélanger les couleurs dans une boucle :

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));
}

Mon problème est que dans le canal alpha, le résultat de l'effet de filigrane est mauvais (qualité) !

Result

Il s'agit de la version originale en png.

Original Pgn

Il s'agit de l'original en format jpg.

Original Jpg

De l'aide ?

5voto

Mark Ransom Points 132545

Dans ce cas, vous ne voulez probablement pas que le résultat prenne l'alpha du filigrane, vous voulez qu'il conserve 100 % de l'opacité du JPEG. Au lieu de définir le nouvel alpha à from.A * amountFrom + to.A * percent il suffit d'utiliser from.A .

Edita: En outre, vous souhaitez que le percent à ajuster en fonction de l'alpha du PNG. Voici votre échantillon, mis à jour :

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)); 
}

J'ai converti ce code en Python et je l'ai appliqué à votre échantillon d'images avec 0,5 %, voici le résultat :

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X