Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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# 反转捕获的指纹的颜色_C#_Bitmap_Gdi_Fingerprint - Fatal编程技术网

C# 反转捕获的指纹的颜色

C# 反转捕获的指纹的颜色,c#,bitmap,gdi,fingerprint,C#,Bitmap,Gdi,Fingerprint,我是图形编程新手。我有一个如下代码,用于从扫描仪捕获指纹: [DllImport("gdi32.dll")] static extern IntPtr CreateDIBitmap(IntPtr hdc, [In] ref BITMAPINFOHEADER lpbmih, uint fdwInit, byte[] lpbInit, byte[] lpbmi,

我是图形编程新手。我有一个如下代码,用于从扫描仪捕获指纹:

    [DllImport("gdi32.dll")]
    static extern IntPtr CreateDIBitmap(IntPtr hdc, [In] ref BITMAPINFOHEADER lpbmih,
                                        uint fdwInit, byte[] lpbInit, byte[] lpbmi,
                                        uint fuUsage);


    /* constants for CreateDIBitmap */
    const int CBM_INIT = 0x04;   /* initialize bitmap */

    /* DIB color table identifiers */
    const int DIB_RGB_COLORS = 0; /* color table in RGBs */
    const int DIB_PAL_COLORS = 1; /* color table in palette indices */

    const int BI_RGB = 0;

    private Bitmap CreateBitmap(IntPtr hDC, Size bmpSize, byte[] data)
    {
        System.IO.MemoryStream mem = new System.IO.MemoryStream();
        System.IO.BinaryWriter bw = new System.IO.BinaryWriter(mem);
        //BITMAPINFO bmpInfo = new BITMAPINFO();
        BITMAPINFOHEADER bmiHeader = new BITMAPINFOHEADER();
        bmiHeader.biSize = 40;
        bmiHeader.biWidth = bmpSize.Width;
        bmiHeader.biHeight = bmpSize.Height;
        bmiHeader.biPlanes = 1;
        bmiHeader.biBitCount = 8;
        bmiHeader.biCompression = BI_RGB;
        bw.Write(bmiHeader.biSize);
        bw.Write(bmiHeader.biWidth);
        bw.Write(bmiHeader.biHeight);
        bw.Write(bmiHeader.biPlanes);
        bw.Write(bmiHeader.biBitCount);
        bw.Write(bmiHeader.biCompression);
        bw.Write(bmiHeader.biSizeImage);
        bw.Write(bmiHeader.biXPelsPerMeter);
        bw.Write(bmiHeader.biYPelsPerMeter);
        bw.Write(bmiHeader.biClrUsed);
        bw.Write(bmiHeader.biClrImportant);

        for (int i = 0; i < 256; i++)
        {
            bw.Write((byte)i);
            bw.Write((byte)i);
            bw.Write((byte)i);
            bw.Write((byte)0);
        }

        IntPtr hBitmap;
        if (data != null)
        {
            hBitmap = CreateDIBitmap(hDC, ref bmiHeader, CBM_INIT, data, mem.ToArray(), DIB_RGB_COLORS);
        }
        else
        {
            hBitmap = CreateDIBitmap(hDC, ref bmiHeader, 0, null, mem.ToArray(), DIB_RGB_COLORS);
        }
        return Bitmap.FromHbitmap(hBitmap);
    }
[DllImport(“gdi32.dll”)]
静态外部IntPtr CreateDIBitmap(IntPtr hdc,[In]ref BitMapInfo头lpbmih,
uint fdwInit,字节[]lpbInit,字节[]lpbmi,
uint(使用情况);
/*CreateDIBitmap的常量*/
常量int CBM_INIT=0x04;/*初始化位图*/
/*DIB颜色表标识符*/
常量int DIB_RGB_颜色=0;/*RGBs中的颜色表*/
常数int DIB_PAL_COLORS=1;/*调色板索引中的颜色表*/
常数int BI_RGB=0;
私有位图创建位图(IntPtr hDC,大小bmpSize,字节[]数据)
{
System.IO.MemoryStream mem=新的System.IO.MemoryStream();
System.IO.BinaryWriter bw=新的System.IO.BinaryWriter(mem);
//BITMAPINFO bmpInfo=新的BITMAPINFO();
BitMapInfo标头bmiHeader=新的BitMapInfo标头();
bmiHeader.biSize=40;
bmiHeader.biWidth=bmpSize.Width;
bmiHeader.biHeight=bmpSize.Height;
bmiHeader.biPlanes=1;
bmiHeader.biBitCount=8;
bmiHeader.biCompression=BI_RGB;
Write(bmiHeader.biSize);
写入(bmiHeader.biWidth);
写入(bmiHeader.biHeight);
写入(bmiHeader.biPlanes);
写入(bmiHeader.biBitCount);
Write(bmiHeader.biCompression);
Write(bmiHeader.biSizeImage);
Write(bmiHeader.biXPelsPerMeter);
Write(bmiHeader.biYPelsPerMeter);
Write(bmiHeader.biClrUsed);
Write(bmiHeader.biclr重要);
对于(int i=0;i<256;i++)
{
写入((字节)i);
写入((字节)i);
写入((字节)i);
写入((字节)0);
}
IntPtr hBitmap;
如果(数据!=null)
{
hBitmap=CreateDIBitmap(hDC,ref bmi头,CBM_INIT,data,mem.ToArray(),DIB_RGB_颜色);
}
其他的
{
hBitmap=CreateDIBitmap(hDC,ref-bmiHeader,0,null,mem.ToArray(),DIB_RGB_COLORS);
}
返回位图.FromHbitmap(hBitmap);
}
这会生成一个带有
黑色
背景和
白色
脊线的图像,但我想反转这些颜色,我想
白色
背景和
黑色
脊线


有可能吗?

这里有一个例子,它是(我认为)最简单的,但速度很慢。这只是给你一个如何做的想法。注
RGB(255255255)
为白色,
RGB(0,0,0)
为黑色。这个想法很简单,如果你有黑色像素,那么从255减去每种颜色,你就会得到白色。反之亦然255-0=255

public Bitmap InvertBitmapColor(Bitmap img)
{
  Bitmap result = new Bitmap(img);
  Color currentColor, newColor;
  for(int x=0; x < img.Width; x++)
    for(int y=0; y < img.Height; y++)
    {
       currentColor = img.GetPixel(x, y);
       newColor = Color.FromArgb(255 - currentColor.R, 255 - currentColor.G, 255 - currentColor.B);
       result.SetPixel(x, y, newColor);
    }
   return result;
}
公共位图反转位图颜色(位图img)
{
位图结果=新位图(img);
颜色currentColor,newColor;
对于(int x=0;x

如果您需要快速图像处理,请使用。您可以找到这两个示例

数据来自何处?你能反转数据中的值吗?是的,这是可能的。这取决于你想怎么做。您可以使用库,可以循环像素并更改其颜色。@Reniuz哪一个是有效的?你能举个例子说明如何做到这一点吗?