所以这里是详细信息(我使用的是 C# BTW):
我从服务器接收到 32bpp 图像(JPEG 压缩)。在某些时候,我想使用位图的 Palette 属性将过饱和像素(亮度 > 240)着色为红色。为此,我需要将图像转换为索引格式。
我曾尝试将图像转换为 GIF,但质量下降。我尝试通过以下方法创建索引格式的新位图:
// causes a "Parameter not valid" error
Bitmap indexed = new Bitmap(orig.Width, orig.Height, PixelFormat.Indexed)
// no error, but the resulting image is black due to information loss I assume
Bitmap indexed = new Bitmap(orig.Width, orig.Height, PixelFormat.Format8bppIndexed)
我现在不知所措。此图像中的数据由用户不断更改,因此如果可以避免的话,我不想手动设置亮度 > 240 的像素。如果我可以在创建图像时设置一次调色板,我的工作就完成了。如果我要以错误的方式开始,请告诉我。
编辑:谢谢大家,这里有一些关于我想要完成的事情的更多细节。
我们正在以高分辨率扫描组织载玻片(病理学应用)。我将接口写入实际的扫描仪。我们使用线扫描相机。为了测试相机的线速,用户扫描一个非常小的部分并查看图像。
图像显示在轨迹栏旁边。当用户移动轨迹栏(调整行频)时,我会更改图像的整体强度,以尝试模拟在新行频下的样子。我目前使用 ImageAttributes 和 ColorMatrix 对象来执行此操作。
当用户调整轨迹栏时,我调整矩阵。这并没有给我每个像素的信息,但性能非常好。我可以在这里使用 LockBits 和一些不安全的代码,但如果可能的话,我宁愿不重写它。创建新图像时,我希望将亮度值 > 240 的所有像素都涂成红色。我在想,预先为位图定义一个调色板将是一种干净的方式。