Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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# 图像Ushort数组到位图格式已映射_C#_Arrays_Image Processing_Bitmap_Bitmapimage - Fatal编程技术网

C# 图像Ushort数组到位图格式已映射

C# 图像Ushort数组到位图格式已映射,c#,arrays,image-processing,bitmap,bitmapimage,C#,Arrays,Image Processing,Bitmap,Bitmapimage,我有一个Ushort图像数据数组作为输入。这里收集了其他输入,例如“宽度、高度”。ushort数组还包含我想要使用的最小值和最大值,它们存储在“io_current”中 我想返回格式化的8ppined位图,我有此代码,但我做错了什么 private Bitmap CreateBitmap(ushort[,] pixels16) { int width = pixels16.GetLength(1); int height = pixels16.Ge

我有一个Ushort图像数据数组作为输入。这里收集了其他输入,例如“宽度、高度”。ushort数组还包含我想要使用的最小值和最大值,它们存储在“io_current”中

我想返回格式化的8ppined位图,我有此代码,但我做错了什么

    private Bitmap CreateBitmap(ushort[,] pixels16)
    {
        int width = pixels16.GetLength(1);
        int height = pixels16.GetLength(0);
        Bitmap bmp = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
        BitmapData bmd = bmp.LockBits(new Rectangle(0, 0, width, height),
        System.Drawing.Imaging.ImageLockMode.ReadOnly, bmp.PixelFormat);

        // This 'unsafe' part of the code populates the bitmap bmp with data stored in pixel16.
        // It does so using pointers, and therefore the need for 'unsafe'. 
        unsafe
        {
            //int pixelSize = 4;
            int i, j; //, j1; //, i1;
            byte b;
            ushort sVal;
            double lPixval;
            //The array has max and min constraints
            int distance = io_current.MaximumValue - io_current.MinimumValue;

            for (i = 0; i < bmd.Height; ++i)
            {
                byte* row = (byte*)bmd.Scan0 + (i * bmd.Stride);
                //i1 = i * bmd.Height;

                for (j = 0; j < bmd.Width; ++j)
                {
                    sVal = (ushort)(pixels16[i, j]);

                    lPixval = ((sVal - io_current.MinimumValue) * 255) / distance; // Convert to a 255 value range
                    //lPixval = ((sVal - io_current.MinimumValue) / distance) * 255;
                    //lPixval = 255 - lPixval; //invert the value
                    if (lPixval > 255) lPixval = 255;
                    if (lPixval < 0) lPixval = 0;
                    b = (byte)(lPixval);
                    //j1 = j * pixelSize; //Pixelsize is one
                    row[j] = b; // Just one in 8bpp

                    //Not necessary for format8bppindexed
                    //row[j1] = b; // Red
                    //row[j1 + 1] = b; // Green
                    //row[j1 + 2] = b; // Blue
                    //row[j1 + 3] = 255; //No Alpha channel in 24bit
                }
            }
        }
        bmp.UnlockBits(bmd);
        return bmp;
    }
private Bitmap CreateBitmap(ushort[,]像素16)
{
int width=pixels16.GetLength(1);
整数高度=像素16.GetLength(0);
位图bmp=新位图(宽度、高度、系统、绘图、成像、像素格式、Format8Bppined);
BitmapData bmd=bmp.LockBits(新矩形(0,0,宽度,高度),
System.Drawing.Imaging.ImageLockMode.ReadOnly,bmp.PixelFormat);
//代码的“不安全”部分使用存储在pixel16中的数据填充位图bmp。
//它使用指针来实现,因此需要“不安全”。
不安全的
{
//int pixelSize=4;
int i,j;//,j1;//,i1;
字节b;
乌肖特·斯瓦尔;
双lPixval;
//阵列具有最大和最小约束
int距离=io_电流.最大值-io_电流.最小值;
对于(i=0;i255)lPixval=255;
如果(lPixval<0)lPixval=0;
b=(字节)(lPixval);
//j1=j*pixelSize;//pixelSize为一
行[j]=b;//8bpp中只有一行
//不必为Format8AppIndexed设置索引
//行[j1]=b;//红色
//行[j1+1]=b;//绿色
//行[j1+2]=b;//蓝色
//行[j1+3]=255;//24位中没有Alpha通道
}
}
}
解锁位(bmd);
返回bmp;
}

我的屏幕是黑色的,或者是单色的。基本上没有返回可用的数据。显然,从评论中可以看出。我试图将其从24位位图代码转换过来,并认为这很容易。

8bpindex是一种非常无用的像素格式,渲染成本很高。它可以追溯到20世纪90年代初,当时视频适配器仍然非常原始,没有足够的RAM。他们使用调色板在一定程度上提高了颜色的逼真度。这是你忘记的。不用麻烦了,我用的是一个RGE,有些过滤器只接受8bpp格式。请参阅:在另一个项目中:它使用24位图,然后使用以下行将其转换为8pp:result=a rge.Imaging.Filters.Grayscale.CommonAlgorithms.BT709.Apply(image);然后使用该“值”进行处理。所以我可以这么做。但这似乎需要更多的时间和处理。看一看:看一看a博客创建者对你评论的回应。。我不确定这是主观的还是什么: