技术开发 频道

J2ME开发中彩色转灰度算法的应用

  所以16位运算下最好的计算公式是使用7位精度,比先前那个系数缩放100倍的精度高,而且速度快:

Gray = (
R
*38
+ G*75
+ B*15
)
>> 7

  其实最有意思的还是那个2位精度的,完全可以移位优化:

Gray = (
R
+ (
WORD)
G
<<1
+ B)
>> 2

  由于误差很大,所以做图像处理绝不用该公式(最常用的是16位精度)。但对于游戏编程,场景经常变化,用户一般不可能观察到颜色的细微差别,所以最常用的是2位精度。

public
static
int
[
]
Turngrey(
Image

image)
{

    
int
rgx[
]
;
    rgx
= new
int
[
image.getWidth
(
)
* image.getHeight
(
)
]
;
    image.getRGB
(
rgx,
0
, image.getWidth
(
)
,
0
,
0
, image.getWidth
(
)
,
                 image.getHeight
(
)
)
;
//获得图片的ARGB值

    
int
r, g, b;
    
for
(
int
j
= 0
; j
< rgx.length
; j
++)
{

        r
= (
rgx[
j]
& 0x00ff0000)
>> 16
;
        g
= (
rgx[
j]
& 0x0000ff00)
>> 8
;
        b
= rgx[
j]
& 0x000000ff;
        
if
(
(
rgx[
j]
== 0x00FFFFFF)
)
{

            continue
;
        }

        r
= g;
        b
= g;

        rgx[
j]
= (
(
r
<< 16
)
| (
g
<< 8
)
| b)
| 0xff000000;
    }

    return
rgx;
}

  以上是别人写的算法,我把这个算法用到游戏中处理角色死亡的画面,整个屏幕变灰,刷新也变慢,这个效果是很COOL的~~

 

0
相关文章