0

次のコードのビットを理解するのに問題があります。

int pixel = img.pixels[i];

    // println("Working on pixel " + i + " out of " + img.pixels.length); 

    int red = (int) red(pixel);
    int green = (int) green(pixel);
    int blue = (int) blue(pixel);

img.pixels[]値を与えると思いましたcolor。では、どのように に格納され、 、、および関数intによって抽出されるのでしょうか?red()blue()green()

4

2 に答える 2

1

Processing の color は、プレーンな 32 ビット int として格納されます。各 8 ビット (256 範囲) には、ARGB (a = アルファ) の値が含まれています。AAAARRRRGGGGBBBB のようないくつかの ting は、int として出力されると奇妙な結果になります。red()、green()、および blue() は、int からコンポーネントを抽出します。それらの参照には、ビットシフト操作を使用した代替(高速)方法があります。たとえば、次のとおりです。

赤(c) = c >> 16 & 0xFF;

上にリンクされている wiki の入り口を確認してください。

于 2013-07-16T17:26:21.670 に答える
0

あなたが慣れ親しんでいる色の値は、色の 16 進数バージョンです。赤、緑、青は、CMYK と同様に色の別の形式である RGB を表します。

たとえば、0 red 0 green および 0 blue は #000000 と同じように黒になり、256 256 256 は白も #FFFFFF になります。

また、RGB を 16 進数に変換する JavaScript の例もいくつか見つけました。下記参照:

function rgbToHex(R,G,B) { return toHex(R)+toHex(G)+toHex(B); }
function toHex(n) {
    n = parseInt(n,10);
    if (isNaN(n)) return "00";
    n = Math.max(0,Math.min(n,255));
    return "0123456789ABCDEF".charAt((n-n%16)/16)
        + "0123456789ABCDEF".charAt(n%16);
}
于 2013-07-16T17:13:42.007 に答える