Я пытаюсь создать обтравочную маску из PNG с альфа-каналом, копируя альфа-значения из моего PNG по другому изображению того же размера.Все используют LockBits, а затем UnlockBits.Похоже, что мой канал настроен правильно, но я не вижу, чтобы он использовался в последующих операциях рисования.
В попытке максимально упростить вещи я использовал практически ту же логику, чтобы установитьзначение красного канала в одном изображении, но после сохранения изображения снова без изменений.Если я пошагово пройдусь по коду, корректно устанавливается красный канал.Вот этот упрощенный код.Любые комментарии или помощь приветствуется.
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);
}