2013-10-04 160 views
2
var xPos = new UnitValue(0.5,'px') ; 
var yPos = new UnitValue(0.5,'px'); 
var pixPos = [ xPos, yPos ]; 

我已經使用這個C#相當於該代碼

Tuple<PsUnits, PsUnits> tuple = new Tuple<PsUnits,PsUnits>(xpos,ypos); 

,但不是爲我工作。任何想法 ??

我做了一個類

public class pixpos 
    { 
    float XPOS; 
    float YPOS; 
    public float xpos 
    { 
     get 
     { 
      return this.XPOS; 
     } 
     set 
     { 
      this.XPOS = value; 
     } 
    } 
    public float ypos 
    { 
     get { return this.YPOS; } 
     set { this.YPOS = value; } 
    } 
} 
    pixpos obj = new pixpos(); 
        obj.xpos = xPos; 
        obj.ypos = yPos; 

它不工作要麼我必須把它作爲參數傳遞給Colorsamples.Add();

Photoshop.Application appRef = default(Photoshop.Application); 
var mySampler = appRef.ActiveDocument.ColorSamplers.Add(ps); 
+0

您必須確定符合photoshop ColorSamplers.Add()要求的簽名。簡單地傳輸任何對象可能有點沉重,以便Photoshop api應自行提取擬合數據。如果它像上面的代碼那樣需要一個數組,那麼只需傳遞一個帶有兩個條目的浮點數組。 – icbytes

+0

「但不適合我」 - 它怎麼不起作用?你有編譯器錯誤,還是運行時異常,或者什麼? 'ColorSamples.Add'作爲一個參數期待什麼? –

+0

是的,它表示例外 非法參數1 點值(可選地單位)預期。 –

回答

2

我有一個快速瀏覽一下互操作和添加方法接受一個對象。正如@icbytes所暗示的那樣,它需要一個數組,因此您可能會拿走一些盒裝對象。 interop全部使用double(不是float),所以double可能是您想要使用的類型。

爲了您自己的好奇心,您應該循環訪問ColorSamplers集合並查看其中包含哪些基礎類型。該集合存儲實現ColorSampler(其中包含SolidColorClass屬性)的對象,因此如果您知道哪些對象實現該屬性,則可以創建這些類型以傳遞給方法。

首先將首選項設置爲像素,以假定您提供的所有值都是基於像素的。

Photoshop.Application appRef = default(Photoshop.Application); 
appRef.Preferences.RulerUnits = PsUnits.psPixels; 

foreach (ColorSampler sampler in appRef.ActiveDocument.ColorSamplers) 
{ 
    // Check to see what underlying type a sampler is so you can try 
    // and make instances of this to pass into the Add method. 
    Console.WriteLine(sampler.GetType().FullName); 
} 

// Try add an object array of double values, based on the error message implied units could work. 
// 'D' with convert the number literal to a 'double'. 
appRef.ActiveDocument.ColorSamplers.Add(new object[] { 0.5D, 0.5D }); 
+0

謝謝@BrutalDev它的工作完美..非常感謝 –