Effet de demi-teintes avec gdi +

Comment pourrais-je imiter cet effet de demi – teinte dans GDI +?

On dirait presque que la version flouée de Floyd – Steinberg a été superposée, mais je ne suis pas convaincu.

entrez la description de l'image ici

J’ai essayé ceci et obtenu ce résultat: entrez la description de l'image ici

Ce peut être un endroit pour commencer. Je l’ai fait comme ça:

  1. Dessine l’image originale avec une faible saturation (en utilisant une masortingce de couleur)
  2. Dessinez l’image originale sur 1) avec une saturation élevée en utilisant un masque de motif (c’est-à-dire les points)

J’ai créé le masque de masque comme ceci:

using (var g = Graphics.FromImage(bmpPattern)) { g.Clear(Color.Black); g.SmoothingMode = SmoothingMode.HighQuality; for (var y = 0; y < bmp.Height; y += 10) for (var x = 0; x < bmp.Width ; x += 6) { g.FillEllipse(Brushes.White, x, y, 4, 4); g.FillEllipse(Brushes.White, x + 3, y + 5, 4, 4); } } 

Et puis je l'ai imposé sur le bitmap sursaturé en utilisant cette technique .

Mise à jour : Élaboration de la fusion des images. Parlons même un peu plus général et disons que nous voulons combiner deux versions colorisées différentes de la même image en utilisant un masque de motif, ce qui donne une nouvelle image - nous pourrions le faire comme ceci:

Créez TROIS nouvelles bitmaps, toutes avec la même taille que l’image originale. Appelez-les bmpA, bmpB et bmpMask.

  • Dessinez une version colorée / effet dans bmpA
  • Dessinez l'autre version colorée / effet dans bmpB
  • Créer le masque dans bmpMask (noir et blanc)
  • Insérez l'un des canaux R / V / B de bmpMask dans le canal alpha de bmpB à l'aide de la méthode transferOneARGBChannelFromOneBitmapToAnother.
  • Dessine bmpB sur bmpA (puisque bmpB contient maintenant des parties transparentes)
  • Le résultat est maintenant bmpA. bmpB et bmpMask peuvent être éliminés.

Terminé