C#GDI-如何检查像素是否不透明?

C#GDI-如何检查像素是否不透明?,c#,gdi,pixel,alpha,C#,Gdi,Pixel,Alpha,我正在使用一种方法来获取图像的像素,以检查该点是否透明。我使用的GetPixel返回System.Drawing.Color和32位颜色信息 这个结构有“A”属性,根据这个属性,我可以得到像素的alpha值 代码: 如何正确检查像素是否不透明?对于alpha通道,值为: Opaque = 255 Translucent = 1-254 Transparent = 0 对于alpha通道,值为: Opaque = 255 Translucent = 1-254 Transparent = 0

我正在使用一种方法来获取图像的像素,以检查该点是否透明。我使用的GetPixel返回System.Drawing.Color和32位颜色信息

这个结构有“A”属性,根据这个属性,我可以得到像素的alpha值

代码:


如何正确检查像素是否不透明?

对于alpha通道,值为:

Opaque = 255
Translucent = 1-254
Transparent = 0

对于alpha通道,值为:

Opaque = 255
Translucent = 1-254
Transparent = 0

对于alpha通道,不透明是255。我同意,这在MSDN文章中是明确的,但我从未得到这个值。对于PNG和GIF图像,此通道的最大值为86,对于完全不透明的JPEG图像,其他值不固定。FWIW:JPEG图像文件不能表示透明度。我认为JPEG2000格式可以,但不是原来的JPEG格式。我不知道为什么bmp.GetPixel会在JPEG的alpha通道中返回垃圾。还要注意,GetPixel可以进行一个或两个像素测试,但如果要测试大量像素,则需要使用直接内存访问位图扫描线。GetPixel()的速度非常慢,部分原因是GetPixel总是将实际像素数据从图像中的本机像素格式转换为GetPixel返回的标准32bpp RGBA格式。直接访问位图像素内存需要更多的工作,但是使用实际的像素内存可以获得更好的性能和保真度。感谢您的解释。实际上,我只读取要测试的第一个像素。我可以检查文件扩展名以避免JPGs,但我希望有更好的解决方案,如果alpha通道的.opaque是255。我同意,这在MSDN文章中是明确的,但我从未得到这个值。对于PNG和GIF图像,此通道的最大值为86,对于完全不透明的JPEG图像,其他值不固定。FWIW:JPEG图像文件不能表示透明度。我认为JPEG2000格式可以,但不是原来的JPEG格式。我不知道为什么bmp.GetPixel会在JPEG的alpha通道中返回垃圾。还要注意,GetPixel可以进行一个或两个像素测试,但如果要测试大量像素,则需要使用直接内存访问位图扫描线。GetPixel()的速度非常慢,部分原因是GetPixel总是将实际像素数据从图像中的本机像素格式转换为GetPixel返回的标准32bpp RGBA格式。直接访问位图像素内存需要更多的工作,但是使用实际的像素内存可以获得更好的性能和保真度。感谢您的解释。实际上,我只读取要测试的第一个像素。我可以检查文件扩展名以避免JPG,但如果有,我想找到更好的解决方案。你是对的,我的位图有一个错误。我编辑以删除错误的内容。谢谢。你说得对,我的位图上有个错误。我编辑以删除错误的内容。非常感谢。