다음은 이미지에 알파 채널을 추가하는 코드입니다. 50 % 알파를 원할 경우 알파 인수로 128을 설정합니다. 참고 비트 맵 복사본을 만듭니다 ...
public static Bitmap AddAlpha(Bitmap currentImage, byte alpha)
{
Bitmap alphaImage;
if (currentImage.PixelFormat != PixelFormat.Format32bppArgb)
{
alphaImage = new Bitmap(currentImage.Width, currentImage.Height, PixelFormat.Format32bppArgb);
using (Graphics gr = Graphics.FromImage(tmpImage))
{
gr.DrawImage(currentImage, 0, 0, currentImage.Width, currentImage.Height);
}
}
else
{
alphaImage = new Bitmap(currentImage);
}
BitmapData bmData = alphaImage.LockBits(new Rectangle(0, 0, alphaImage.Width, alphaImage.Height),
ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
const int bytesPerPixel = 4;
const int alphaPixel = 3;
int stride = bmData.Stride;
unsafe
{
byte* pixel = (byte*)(void*)bmData.Scan0;
for (int y = 0; y < currentImage.Height; y++)
{
int yPos = y * stride;
for (int x = 0; x < currentImage.Width; x++)
{
int pos = yPos + (x * bytesPerPixel);
pixel[pos + alphaPixel] = alphaByte;
}
}
}
alphaImage.UnlockBits(bmData);
return alphaImage;
}
감사합니다. 크리스, 마샬을 사용하여 약간 변경했습니다. 복사하여 안전하지 않은 블록이 필요 없도록합니다. 그렇지 않으면 치료가 필요합니다. – Kepboy