Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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
.net NET中的布尔位图操作?_.net_Bitmap_Boolean - Fatal编程技术网

.net NET中的布尔位图操作?

.net NET中的布尔位图操作?,.net,bitmap,boolean,.net,Bitmap,Boolean,我有两个8bpp位图。我想对一个和另一个进行位运算,但在.NET中我看不到任何明显的方法。不使用非.NET方法也可以这样做吗? 谢谢 如果性能不重要,请使用Bitmap.GetPixel和Bitmap.SetPixel我想您正在寻找。您可以尝试将位图转换为字节数组,然后循环遍历字节并将它们放在一起 编辑: 对循环思想进行时间测试: 示例代码: DateTime StartTime = DateTime.Now; Image Image1 = Image.FromFile("C:\\Image1.

我有两个8bpp位图。我想对一个和另一个进行位运算,但在.NET中我看不到任何明显的方法。不使用非.NET方法也可以这样做吗?
谢谢

如果性能不重要,请使用Bitmap.GetPixel和Bitmap.SetPixel

我想您正在寻找。您可以尝试将位图转换为字节数组,然后循环遍历字节并将它们放在一起

编辑: 对循环思想进行时间测试:

示例代码:

DateTime StartTime = DateTime.Now;
Image Image1 = Image.FromFile("C:\\Image1.bmp");
Image Image2 = Image.FromFile("C:\\Image2.bmp");
DateTime AfterLoad = DateTime.Now;
MemoryStream S = new MemoryStream();
Image1.Save(S, System.Drawing.Imaging.ImageFormat.Bmp);
Byte[] I1 = S.ToArray();
Image2.Save(S, System.Drawing.Imaging.ImageFormat.Bmp);
Byte[] I2 = S.ToArray();
DateTime AfterConvert = DateTime.Now;
DateTime AfterLoop = DateTime.Now;
if (I1.Length == I2.Length)
{
    Byte[] I3 = new Byte[I1.Length];
    for (int i = 0; i < I1.Length; i++)
        I3[i] = Convert.ToByte(I1[i] & I2[i]);
    AfterLoop = DateTime.Now;
    FileStream F = new FileStream("C:\\Users\\jamesb\\desktop\\Image3.bmp", FileMode.OpenOrCreate);
    F.Write(I3, 0, I3.Length);
    F.Close();
}
DateTime Finished = DateTime.Now;
MessageBox.Show("Load Time: " + (AfterLoad - StartTime).TotalMilliseconds.ToString() + " ms" + "\r\n" +
                "Convert Time: " + (AfterConvert - AfterLoad).TotalMilliseconds.ToString() + " ms"+ "\r\n" +
                "Loop Time: " + (AfterLoop - AfterConvert).TotalMilliseconds.ToString() + " ms"+ "\r\n" +
                "Save Time: " + (Finished - AfterLoop).TotalMilliseconds.ToString() + " ms"+ "\r\n" +
                "Total Time: " + (Finished - StartTime).TotalMilliseconds.ToString() + " ms");
图像“Image1”和“Image2”为4000 x 2250(来自转换为8位bmp的数码相机)

您可以使用“”函数,在该函数中,您可以使用源和目标(SRCAND),pinvoke签名为

下面是一篇关于使用BitBlt包装器的Codeproject的文章

希望这有帮助, 顺致敬意,
汤姆。

是8bpp索引吗?这意味着有256种颜色,但/它们在每个像素索引到的单独表中指定。NET称之为Format8BPindexed。不,它只是从更深的图像中提取的一个通道。嗯,我不确定这是否是受支持的PixelFormat值之一。他要求在不使用非.NET方法的情况下执行此操作。@Matthew…不幸的是…有些事情是.NET无法完成的,依赖pinvoke来完成的。@Matthew.没有理由.NET不能这样做。@Matthew.在.NET中有bitblt函数吗?我希望有一个.NET机制。但是使用BitBlt可能比我在.NET中所能做的任何事情都要快。我可能会用这个。谢谢。如果我找不到一个库方法,我可能不得不求助于这个。不幸的是,C#中的循环可能会执行得更慢。不幸的是,这些在.NET中非常慢。这是一种有趣的方法。不幸的是,C#中的循环速度很慢。
Load Time: 30.003 ms
Convert Time: 94.0094 ms
Loop Time: 128.0128 ms
Save Time: 177.0177 ms
Total Time: 429.0429 ms