SetPixel(Color.black)与任何颜色的Set Pixel之间的差异

时间:2013-06-16 21:06:53

标签: c# .net image colors bitmap

当您创建新的位图并使用SetPixel()函数并设置参数黑色时,结果与您未为指定像素设置任何颜色并以Jpeg格式保存位图时的结果相同。 保存我的图像后我读了Jpeg图像文件,我怎么知道像素有真正的黑色还是没有设置?

3 个答案:

答案 0 :(得分:1)

“未设置”和“黑色”在JPEG中相同。默认情况下,它是黑色的。在具有透明度的格式中,如32位PNG,您将能够分辨出差异。

答案 1 :(得分:1)

JPEG文件不支持透明度,因此每个像素都有某种颜色 - 无论您是否明确设置它。这就是为什么你没有设置某个像素的颜色并不重要 - 当你将位图保存为JPEG时,所有像素都会以某种颜色保存。您未设置的那些将使用默认值黑色保存。

当您使用支持透明度的图像格式(如PNG)时,可以使用另一种“颜色”(默认值):透明色。这是默认情况下未明确设置的像素使用的颜色。

请注意,透明颜色实际上不是单独的颜色:每个像素都有一个透明字节(假设像素格式为ARGB),默认情况下,每个像素的透明度字节设置为255(完全透明)。因此,可以独立控制每个像素的透明度。

答案 2 :(得分:1)

你应该使用PNG。它是压缩的图像格式。它与JPEG相比的主要优点是它无损并支持透明度。在只有少量颜色的简单图像上,我使用PNG体验了更小的图像尺寸。

如果你出于某种原因只需要使用JPEG,我会用一些特定的颜色来表达“没有像素”。如果要使用黑色(0,0,0)作为此颜色键,则必须使用不同的颜色作为真正的黑色像素。例如,这可以是0x000001(0,0,1)。眼睛无法与真正的黑色区别开来,但计算机程序可以。因此,如果图像中有0x000000(0,0,0)个彩色像素,则将其替换为0x000001(0,0,1)。但请注意,JPEG的有损压缩在使用此技术时可能会导致问题。使用更高的质量应该可以解决这个问题。