如何获得颜色的灰度值?

时间:2013-01-10 09:16:43

标签: actionscript-3 flash

我正在使用下面的代码获取颜色,将其更改为灰度然后保存。问题是它始终是蓝色而不是灰色。

newBitmapData = new BitmapData(bitmapWidth, bitmapHeight, true);

// Extract individual red, green, and blue values for the pixel:
rgbVal = bitmapData.getPixel(x, y);

redVal = (rgbVal & 0xFF0000) >> 16;
greenVal = (rgbVal & 0x00FF00) >> 8;
blueVal = rgbVal & 0x0000FF;


grayVal = Math.floor(0.3 * redVal + 0.59 * greenVal + 0.11 * blueVal);

newBitmapData.setPixel(x, y, grayVal);

我错过了什么?

2 个答案:

答案 0 :(得分:4)

你的“grayVal”只是它的亮度,用它来做出亮度的颜色:

newBitmapData.setPixel(x, y, Math.min(255,uint(grayVal))*0x10101);

答案 1 :(得分:0)

你没有将红色和绿色再次移回:

redVal = (rgbVal & 0xFF0000) >> 16;
greenVal = (rgbVal & 0x00FF00) >> 8;
blueVal = rgbVal & 0x0000FF;

//shift red and green back to original positions
redVal = int(0.3*redVal)<<16;
greenVal = int(0.59*greenVal)<<8;

grayVal = Math.floor(redVal + greenVal + 0.11*blueVal);