Je tente de créer un masque d'écrêtage sur un PNG avec un canal alpha en copiant les valeurs alpha de mon PNG sur une autre image de même taille. Tout en utilisant LockBits puis UnlockBits. Il semble que ma chaîne soit correctement définie mais je ne la vois pas utilisée dans les opérations de dessin suivantes. Dans une tentative de simplifier les choses autant que possible, j'ai utilisé pratiquement la même logique pour définir uniquement la valeur du canal rouge dans une seule image, mais après avoir enregistré l'image, encore une fois, pas de changement. Si je parcours le code, le canal rouge valide est correctement défini. Voici ce code simplifié. Tout commentaire ou aide est apprécié.GDI + LockBits/Alpha
var image = Image.FromFile(@"C:\imaging\image.jpg");
image.LoadRed();
image.Save(@"C:\imaging\output.jpg");
// image.jpg and output.jpg are the same.
// I would expect output to be washed over with lots of red but it isn't
public static void LoadRed(this Image destination)
{
var destinationBitmap = new Bitmap(destination);
const int blueChannel = 0;
const int greenChannel = 1;
const int redChannel = 2;
const int alphaChannel = 3;
var rec = new Rectangle(Point.Empty, destination.Size);
var destinationData = destinationBitmap.LockBits(rec, ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
unsafe
{
byte* destinationPointer = (byte*)destinationData.Scan0.ToPointer();
destinationPointer += redChannel;
for (int i = rec.Width * rec.Height; i > 0; i--)
{
*destinationPointer = 255;
destinationPointer += 4;
}
}
destinationBitmap.UnlockBits(destinationData);
}
Ah oui. Je l'ai juste compris! Je me suis cassé la tête sur celui-ci et off pour quelques jours. J'étais sur le point de supprimer la question mais vous gagnez! +1! – andleer
Heureux d'entendre que ça marche enfin;) –