Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何获得颜色的灰度值?_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 如何获得颜色的灰度值?

Actionscript 3 如何获得颜色的灰度值?,actionscript-3,flash,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) >>

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

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);
我错过了什么

您的“灰度值”只是其亮度,要使其亮度变为颜色,请执行以下操作:

newBitmapData.setPixel(x, y, Math.min(255,uint(grayVal))*0x10101);
您的“灰度值”只是其亮度,要使其亮度变为颜色,请执行以下操作:

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

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

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);
redVal=(rgbVal&0xFF0000)>>16;
greenVal=(rgbVal&0x00FF00)>>8;
blueVal=rgbVal&0x0000FF;
//将红色和绿色移回原始位置

redVal=int(0.3*redVal)您没有再次将红色和绿色移回:

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);
redVal=(rgbVal&0xFF0000)>>16;
greenVal=(rgbVal&0x00FF00)>>8;
blueVal=rgbVal&0x0000FF;
//将红色和绿色移回原始位置
redVal=int(0.3*redVal)