检查C#中的图像是否为空
我到处都看,但似乎没有一个标准(我可以看到)如何检查图像是否为空白.在C#中
我有办法做到这一点,但很想知道检查图像是否为空白的正确方法是什么,所以每个人都可以在将来知道. 我不会复制粘贴一堆代码,如果你想要我,这将是我的荣幸,但我首先要解释我如何检查图像是否为空白. 你拍一张.jpg图片,获取它的宽度.例如500像素 然后你检查每个像素的颜色在(250宽度和高度)的位置(你迭代的地方是想象图像的高度). 这样做只是垂直检查图像的中间像素线.它通过所有像素检查,看看颜色是否是白色除外.我已经这样做了,所以你不必搜索所有500 *像素的高度,因为你几乎总是会遇到页面中间的颜色. 它的工作……有点慢……必须有更好的方法来做到这一点?您可以将其更改为垂直搜索2/3/4行,以增加发现非空白页面的机会,但这将花费更长时间. (另请注意,使用图像的大小来检查它是否包含某些内容在这种情况下不起作用,因为打开两个句子的页面和空白页面的大小彼此太靠近) 添加解决方案后. 帮助实施和理解解决方案的资源. > Writing unsafe code – pointers in C (请注意,在第一个网站上,所声明的Pizelformat实际上是Pixelformat) – 我知道的小错误,只是提到,可能会引起一些混淆. 在我实施该方法以加速像素搜寻之后,速度没有增加那么多.所以我认为我做错了什么. 40个图像的旧时间= 15.63. 40张图片的新时间= 15.43 我在伟大的文章DocMax quoted中看到,代码“锁定”在一组像素中. (或者多数民众赞成我是如何理解的) private int testPixels(String sourceDir) { //iterate through images string[] fileEntries = Directory.GetFiles(sourceDir).Where(x => x.Contains("JPG")).ToArray(); var q = from string x in Directory.GetFiles(sourceDir) where x.ToLower().EndsWith(".jpg") select new FileInfo(x); int holder = 1; foreach (var z in q) { Bitmap mybm= Bitmap.FromFile(z.FullName) as Bitmap; int blank = getPixelData2(mybm); if (blank == 0) { holder = 0; break; } } return holder; } 然后上课 private unsafe int getPixelData2(Bitmap bm) { BitmapData bmd = bm.LockBits(new System.Drawing.Rectangle((bm.Width / 2),1,bm.Height),System.Drawing.Imaging.ImageLockMode.ReadOnly,bm.PixelFormat); int blue; int green; int red; int width = bmd.Width / 2; for (int y = 0; y < bmd.Height; y++) { byte* row = (byte*)bmd.Scan0 + (y * bmd.Stride); blue = row[width * 3]; green = row[width * 2]; red = row[width * 1]; // Console.WriteLine("Blue= " + blue + " Green= " + green + " Red= " + red); //Check to see if there is some form of color if ((blue != 255) || (green != 255) || (red != 255)) { bm.Dispose(); return 1; } } bm.Dispose(); return 0; } 解决方法
如果你能容忍错误的机会,那么这种方法似乎很好;在我的情况下,我做了一些非常相似的事情,尽管我总是有一个视觉确认来处理错误.
对于性能,关键的开放性问题是如何获得要测试的像素.如果您使用的是 更好的性能将来自同时获取所有像素然后循环它们.我个人喜欢Bob Powell’s LockBits discussion的清晰度和完整性.使用这种方法,根据您的性能需求,检查所有像素可能是合理的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |