如何在winjs中设置png图像颜色

时间:2013-08-31 19:50:12

标签: javascript html5 windows-8

您好,我正在使用html和javascript的Windows 8应用程序。我必须显示从api收到的一些png图像,并且必须设置从api收到的颜色。我google了很多但没有找到解决方案。虽然我知道在xaml中可以做一些像这样的

<Rectangle Fill="{Binding Path=widget.logo, Converter={StaticResource PSWidgetLogoColorConverter1}}" Height="60" Width="60">
                                        <Rectangle.OpacityMask>
                                            <ImageBrush ImageSource="{Binding Path=widget.logo,Converter={StaticResource PSWidgetImageConverter1}}"/>
                                        </Rectangle.OpacityMask>
                                    </Rectangle>

但无法弄清楚如何在这里做到。

欢迎您提出宝贵的建议,请帮忙。

1 个答案:

答案 0 :(得分:0)

我认为您必须更改canvas元素内的颜色。

  1. 将canvas标记添加到您的应用中:

     <canvas id="myCanvas" />
    
  2. 将图片加载到画布中:

    var myImage = new Image();
    canvas = document.getElementById("myCanvas");
    
    if (canvas.getContext) {
      ctx = canvas.getContext("2d");
      myImage.onload = function() {
        ctx.drawImage(myImage, 0, 0);
      }
      myImage.src = "kestral.png";
    }
    
  3. 获取图像数据并根据需要进行更改:

  4. getImageData返回画布中x,y,width和height位置的所有rgba值。所以它是:getImageData(x,y,width,height)。结果你得到一个大小为:width * height * 4的数组然后你可以循环它并改变每个rgba颜色:

        myImage = ctx.getImageData(0, 0, 200, 200);
        var picLength = 200*200;
    
        // Loop through data.
        for (var i = 0; i < picLength * 4; i += 4) {
          // First bytes are red bytes.        
          // Second bytes are green bytes.
          // Third bytes are blue bytes.
          // Fourth bytes are alpha bytes
          //check for full alpha
          if(myImage.data[i+3] == 255) {
             //change it to black
             myImage.data[i]=0;
             myImage.data[i+1]=0;
             myImage.data[i+2]=0;
             myImage.data[i+3]=0;
          }
        }
    
    1. 将更改的图像数据放回

      ctx.putImageData(myImage, 0, 0);
      
    2. Here在msdn上是一个很好的完整示例。