首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >鼠标悬停时的灰度

鼠标悬停时的灰度
EN

Stack Overflow用户
提问于 2013-01-22 05:38:29
回答 1查看 163关注 0票数 0

我正在尝试使用HTML5画布在Javascript中将图像转换为灰度。我到底做错了什么!?我知道它真的很接近!

代码语言:javascript
复制
function convertToGreyscale(str)
{
    // Get the Canvas
    var oCanvas = document.getElementById(str);
    // Get the Canvas Context
    var oContext = oCanvas.getContext('2d');

    // Get the height & width of the canvas
    var oHeight = oCanvas.height;
    var oWidth = oCanvas.width;

    // Get the image data object
    // getImageData(startX,startY,endX,endY)
    var oImageData = oContext.getImageData(0,0,oHeight,oWidth);

    // Get the actual pixel information
    var oPixelArray = oImageData.data;
    var iLength = oPixelArray.length;

    for (var iCount = 0; iCount < iLength; iCount += 4)
    {
        var oRedPixel = oPixelArray[iCount];
        var oGreenPixel = oPixelArray[iCount+1];
        var oBluePixel = oPixelArray[iCount+2];
        var oGreyValue = oRedPixel * 0.2126 + oGreenPixel * 0.7152 + oBluePixel * 0.0722;

        // Set R,G & B to be the new grey value
        oRedPixel = oGreyValue;
        oGreenPixel = oGreyValue;
        oBluePixel = oGreyValue;

    }

    // Set the greyscale image back on the canvas.
    oContext.putImageData(oImageData,0,0);
    oCanvas.src = oCanvas.toDataURL();

}

下面是相关的HTML:

代码语言:javascript
复制
<canvas id="myCanvas" width="500" height="500"></canvas>

<div style="border: 1px solid black" onmouseover="convertToGreyscale('myCanvas')">Mouseover</div>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-22 05:41:31

现在,您只需更改oRedPixel、oGreenPixel和oBluePixel的值,但实际的oPixelArray保持不变。

尝试直接更改数组值

代码语言:javascript
复制
oPixelArray[iCount] = oGreyValue;
oPixelArray[iCount+1] = oGreyValue;
oPixelArray[iCount+2] = oGreyValue;

而且您不需要这一行,因为画布没有src属性

代码语言:javascript
复制
// oCanvas.src = oCanvas.toDataURL();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14447707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档