因此,这里有详细(我使用BTW C#):

我从服务器接收一个32bpp的图像(JPEG压缩)。在某些时候,我想用一个位图的调色板属性着色过饱和像素(亮度> 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和嘉洛斯对象当前做。

当用户调整轨迹栏中,我调整矩阵。这不会给我的每像素信息,但性能是非常好的。我的可能的使用LockBits和这里的一些不安全的代码,但我宁愿不如果可能重写。当创建新的图像,我想为具有> 240被着色为红色的亮度值的所有像素。我在想,定义为位图前面的调色板将是这样做的清洁方式。

有帮助吗?

解决方案 3

感谢大家的帮助。看来,这可以通过使用ImageAttributes类和简单地设置一个颜色重映射表来解决。

ColorMap[] maps = new ColorMap[someNum]
//  add mappings
imageAttrs.SetRemapTable(maps);

感谢您的帮助再次,至少我学到了一些东西。

其他提示

这32bpp的要8bpp的索引将几乎总是导致质量损失,除非原始图像具有小于256种颜色总数。

您可以创建另一个形象,是与受影响的像素红色覆盖,然后显示这两个的?

由于你要用于亮度> 240,则可以覆盖第一转换为灰度,然后为索引以获得overbright像素。

您不指定你用它做什么,一旦你所标记的罪犯,所以我不知道这是否会工作。

听起来像你可以用像素着色器很容易做到。即使是非常早期的着色模式的会支持的东西容易,因为这一点。

问题是但是:

您可以包括没有太多hastle在您的应用程序着色器支持?

你知道着色器程序?

编辑:

您可能没有3D背景,你可以做这样的东西= /

我大多只是播出了我的想法。

由像素操纵图象象素应该在实时可行具有单个CPU不应该吗?

如果不是,考虑GPGPU编程和Open CL。

再次编辑:

如果你给什么应用程序实际上并我们可能会有点帮助更多的一些细节?举例来说,如果你让我提示的web应用程序没有人会是有意义的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top