2015-10-28 32 views
1

我正在將hsb顏色轉換爲rgb,因爲我將java程序轉換爲c#。然而,在該結構的HSB顏色,我似乎無法調用的方法,一旦我做了一個對象,象下面這樣:從結構中調用方法

HSB顏色結構

public struct HSBColor 
     { 
    public static Color FromHSB(HSBColor hsbColor) 
      { 
       float r = hsbColor.b; 
       float g = hsbColor.b; 
       float b = hsbColor.b; 
       if (hsbColor.s != 0) 
       { 
        float max = hsbColor.b; 
        float dif = hsbColor.b * hsbColor.s/255f; 
        float min = hsbColor.b - dif; 

        float h = hsbColor.h * 360f/255f; 

        if (h < 60f) 
        { 
         r = max; 
         g = h * dif/60f + min; 
         b = min; 
        } 

       } 

     ***I know there are missing brackets here, only using snippets of code*** 

天壤之別

private void mandelbrot() // calculate all points 
     { 
      HSBColor hsbcolor = new HSBColor(); 
      hsbcolor.FromHSB(h, 0.8f, b); 
     } 

「FromHSB」中的hsbcolor.FromHSB(h,0.8f,b);線標有下劃線指出該錯誤:

錯誤3「Fractal.Form1.HSBColor」不包含關於「HSB顏色」的定義和沒有擴展方法「HSB顏色」接受類型「Fractal_Assignment.Form1.HSBColor」的第一個參數可以找到(是否缺少using指令或程序集引用?)

+4

'顏色結果= HSBColor.FromHSB(H,0.8f,B);'*靜態*方法要*類*不* *例如三江源 –

+0

非常:) – user2326995

回答

1
public static Color FromHSB(HSBColor hsbColor) 

這意味着它是一個靜態函數。你可以通過類名訪問一個靜態函數。

hsbcolor.FromHSB(h, 0.8f, b); 

hsbcolor在這裏是一個變量。改變這一行到

Color color = HSBColor.FromHSB(h, 0.8f, b); 
+2

'HSBColor'參數不是必需的,然後 –

+0

哎呀我的壞...編輯。 –

0

根據你的方法簽名

public static Color FromHSB(HSBColor hsbColor) 

你必須把這樣的事情:

// "static" wants class (i.e. HSBColor) not instance 
    // FromHSB wants one HSBColor argument: "new HSBColor(...)" 
    Color result = HSBColor.FromHSB(new HSBColor(h, 0.8f, b)); 

一個更好的實現是FromHSB將從靜態實例方法:

public struct HSBColor { 
    // note no "static" here 
    public Color ToColor() { 
     float r = this.b; // change "hsbColor" into "this " 
     float g = this.g; 
     ... 
    } 

,所以你可以把它

Color result = (new HSBColor(h, 0.8f, b)).ToColor();