2016-05-26 11 views
3

隨着getColorMode()在處理

colorMode(HSB); 
colorMode(RGB); 

我可以設置顏色模式。 顯然功能getColorMode()不存在。 是否有其他解決方案來獲取顏色模式? 我想要做的就是這樣的事情

int cMode = getColorMode(); 
colorMode(HSB); 
// draw stuff 
colorMode(cMode); 

此代碼是我Track類裏面。我想繪製一個記錄的GPS軌跡,色調值應該由速度或高程來控制。 現在我完成繪圖後,我將顏色模式設置回RGB。當然,最好將它恢復到之前的顏色模式,而不是假設它已經是RGB。

+0

我剛剛g沒有電子郵件對我的標籤編輯提出質疑(這非常非常規 - 這就是爲什麼我們有評論)。我將在此回覆:我的編輯基於StackOverflow Meta決策,在[Processing tag info page](http://stackoverflow.com/tags/processing/info)中提到。我相信用一個或另一個來標記的情況,但很少兩者都是最強的。所以,如果你想爭辯,繼續並權衡在該頁面上鍊接的討論。也就是說,我也不是一個進入編輯之戰的人,所以如果你非常不同意一個標籤編輯,可以隨時添加它。 – CodeMouse92

回答

5

讓我們來看看the source for PApplet。這個類包含此變量:

public PGraphics g; 

這裏是colorMode()功能:

public void colorMode(int mode) { 
    if (recorder != null) recorder.colorMode(mode); 
    g.colorMode(mode); 
} 

這告訴我們PApplet#colorMode()實際上只是一個快捷方式到PGraphics#colorMode()。我們來看看the source for PGraphics。從類colorMode()功能,最終導致這裏:

public void colorMode(int mode, 
         float max1, float max2, float max3, float maxA) { 
    colorMode = mode; 
    //more code 

這使我們的colorMode變量:

/** The current colorMode */ 
public int colorMode; // = RGB; 

換句話說,要獲得當前色彩模式,你必須從PApplet去到它的g變量,到它的colorMode變量。如果您在草圖的時候,它看起來像這樣:

void setup() { 
size(500, 500); 
colorMode(HSB); 
} 

void draw() { 

    background(0); 

    if(g.colorMode == RGB){ 
    println("RGB"); 
    } 
    else if(g.colorMode == HSB){ 
    println("HSB"); 
    } 
} 

如果你不是在一個草圖,那麼你就需要使用this關鍵字在PApplet情況下通過。

PApplet mySketch; 
int colorMode = mySketch.g.colorMode; 
2

除了凱文的詳盡的回答,您可以使用pushStyle()/popStyle()呼籲孤立的繪畫風格(包括色彩空間):

void draw(){ 
    background(255); 
    bars(HSB,0); 
    bars(RGB,50); 
} 
void bars(int colorSpace,int y){ 
    pushStyle(); 
    colorMode(colorSpace); 
    for(int i = 0 ; i < 10; i++){ 
    fill(i * 25,255,255); 
    rect(10*i,y,10,50); 
    } 
    popStyle(); 
} 

您可以運行以下演示:

function setup(){ 
 
    createCanvas(100,100); 
 
} 
 
function draw(){ 
 
    background(255); 
 
    bars(HSB,0); 
 
    bars(RGB,50); 
 
} 
 
function bars(colorSpace,y){ 
 
    push(); 
 
    colorMode(colorSpace); 
 
    for(var i = 0 ; i < 10; i++){ 
 
    fill(i * 25,255,255); 
 
    rect(10*i,y,10,50); 
 
    } 
 
    pop(); 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.0/p5.min.js"></script>