我有一个程序在屏幕上显示RGB图像(内部表示为int [] s)。我希望能够调整用于将内存中值(例如,红色强度为128)映射到屏幕上的值的参数。例如,我希望能够说"红色的最大强度(1.0)对应于像素值50;最小强度(0.0)对应于4"。当然也要调整绿色和蓝色组件。
据我所知,这要求我制作一个自定义ColorModel
,也许是PackedColorModel
的子类。目前我正在使用DirectColorModel
,它似乎不可调整(它总是将组件的0映射到显示器上的0,显示器上的255到1.0)。更糟糕的是,由于某些原因,它的方法是最终的,所以我无法使用不同的规则创建DirectColorModel
的自定义变体。
不幸的是,PackedColorModel
似乎对子类来说并不是一件容易的事。除了将大量方法抽象化之外,其构造函数还需要ColorSpace
,其中唯一的实现是ICC_ColorSpace
,而后者又需要ICC_Profile
。如果我正在尝试做一些摄影工作,那么也许我会对这个细节水平感兴趣,但我的需求并不那么复杂;我只是希望能够改变图像数据中R / G / B分量的强度比例。
是否有一些相当直接的方式来实现我想要做的事情,或者我是否真的必须跳过兔子洞并建立一个复杂的系统,只是为了以合理的性能进行一些基本的颜色调整?
我过去使用OpenGL调用做了类似的事情,但不幸的是,这里不是一个选项,因为最终渲染代码不在我的控制之内;我只能调整Graphics.drawImage()
电话使用的颜色模型。
谢谢你的时间!