[英]Generate a mask of the alpha channel from a bitmap
我需要從System.Drawing.Bitmap的alpha通道生成一個灰度位圖。
我嘗試使用GetPixel和SetPixel,但這不適用於PixelFormat為Format16bppGrayScale的位圖。
例如,將我的灰度圖像中的所有像素都設置為黑色。 SetPixel引發異常。
var bitmap = new Bitmap(16, 16, PixelFormat.Format16bppGrayScale);
for (int x = 0; x < bitmap.Width; x++)
{
for (int y = 0; y < bitmap.Height; y++)
{
bitmap.SetPixel(x,y, Color.Black);
}
}
您可以使用BitmapData bitmapDataIn = bitmap.LockBits(...),然后使用byte * pDataIn =(byte *)bitmapDataIn.Scan0; 獲取指向原始位圖數據的指針。
不過這是32位的位圖數據
pDataIn[y * iStrideSize + x * 4 + 0] //Blue
pDataIn[y * iStrideSize + x * 4 + 1] //Greed
pDataIn[y * iStrideSize + x * 4 + 2] //Red
pDataIn[y * iStrideSize + x * 4 + 3] //Alpha
您可以使用指針修改或讀取像素值
這是我的代碼的復制粘貼,
unsafe
{
byte* pDataIn = (byte*)bitmapDataIn.Scan0;
int iStrideSize = bitmapDataIn.Stride; //one row size in bytes, iWidth * 4
int y, x;
byte B, G, R, A;
for (y = 0; y < iHeight; y++)
{
for (x = 0; x < iWidth; x++)
{
B = pDataIn[y * iStrideSize + x * 4 + 0];
G = pDataIn[y * iStrideSize + x * 4 + 1];
R = pDataIn[y * iStrideSize + x * 4 + 2];
A = pDataIn[y * iStrideSize + x * 4 + 3];
}
}
bitmap.UnlockBits(bitmapDataIn);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.