Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从位图生成alpha通道的遮罩_C#_.net_Gdi+ - Fatal编程技术网

C# 从位图生成alpha通道的遮罩

C# 从位图生成alpha通道的遮罩,c#,.net,gdi+,C#,.net,Gdi+,我需要从System.Drawing.bitmap的alpha通道生成灰度位图 我尝试使用GetPixel和SetPixel,但这不适用于像素格式为Format16bppGrayScale的位图 例如,将灰度图像中的所有像素设置为黑色。SetPixel引发异常 var bitmap = new Bitmap(16, 16, PixelFormat.Format16bppGrayScale); for (int x = 0; x < bitmap.Width; x++) { for

我需要从System.Drawing.bitmap的alpha通道生成灰度位图

我尝试使用GetPixel和SetPixel,但这不适用于像素格式为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);
    }
}
var bitmap=新位图(16,16,PixelFormat.Format16bppGrayScale);
用于(int x=0;x
您可以使用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);
            }
不安全
{
byte*pDataIn=(byte*)bitmapDataIn.Scan0;
int-iStrideSize=bitmapDataIn.Stride;//一行大小(字节),iWidth*4
int y,x;
字节B,G,R,A;
对于(y=0;y
您可以使用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);
            }
不安全
{
byte*pDataIn=(byte*)bitmapDataIn.Scan0;
int-iStrideSize=bitmapDataIn.Stride;//一行大小(字节),iWidth*4
int y,x;
字节B,G,R,A;
对于(y=0;y
能否显示代码并指出哪些部分不适用于16bppGrayScale图像?能否显示代码并指出哪些部分不适用于16bppGrayScale图像?