画像にアルファチャンネルを追加するコードです。 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;
}
ありがとうございましたKris、私はMashalを使って少し変更しました.Copy、私は安全でないブロックは必要ありませんでしたが、それ以外の場合は治療になります。 – Kepboy