2

最近、かなり奇妙な問題に直面しました。以下のコードスニペットをご覧ください。

<canvas id="cancan" width="320", height="480">One color image</canvas>

<script type="text/javascript">
function imageLoaded(ev) {
    element = document.getElementById("cancan");
    c = element.getContext("2d");

    im = ev.target; // the image, assumed to be 200x200

    // read the width and height of the canvas
    width = element.width;
    height = element.height;

    // stamp the image on the left of the canvas:
    c.drawImage(im, 0, 0);

    // get all canvas pixel data
    imageData = c.getImageData(0, 0, width, height);     
    console.log(imageData.data[0] + " " + imageData.data[1] + " " + imageData.data[2]);
    // output is "243 52 47"
    // matlab and c# output is: "237 36 27"
}

im = new Image();
im.onload = imageLoaded;
im.src = "imgtest1.jpg"; // image is 320x480

</script>

この例で使用されているimgtest1.jpgは一定です。各ピクセルは(237,36,27)です。getImageData()によって返されるピクセルの色は異なります-それはから返されるものよりも明るいです-たとえば-matlab-理由は何でしょうか?

4

1 に答える 1

0

明るさまたは明るさまたは強度は、(R+G+B)/3 として計算できます (HSI カラー コードを参照)。サンプル コードの結果の後、RGB 値が元の値 ( Matlabまたは C++から) よりも高いため、出力画像が元の画像よりも少し明るいことは明らかです。

質問は、「なぜあなたのコードはより高い値を計算するのですか?」でなければなりません。わかりませんが、同じ明るさになるように値を再スケーリングできます。

于 2013-02-28T11:58:52.287 に答える