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

J'ai utilisé cetteC# équivalent à ce code

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

mais ne fonctionne pas pour moi. Une idée ??

J'ai fait une classe

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; 

son ne fonctionne pas non plus, je dois le transmettre comme argument à la Colorsamples.Add();

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

Vous devez être sûr de rencontrer la signature, que les photoshop ColorSamplers.Add() exigent. Le simple fait de transférer n'importe quel objet est peut-être un peu lourd, afin que Photoshop api puisse extraire lui-même les données d'ajustement. S'il attend un tableau comme dans le code ci-dessus, il suffit de passer un tableau de flottants avec deux entrées. – icbytes

+0

"mais ne fonctionne pas pour moi" - comment ça ne marche pas? Avez-vous une erreur de compilation, ou une exception d'exécution, ou quoi? Qu'est-ce que 'ColorSamples.Add' attend en tant qu'argument? –

+0

oui indique l'exception Argument illégal 1 Valeur de point (éventuellement en unités) attendue. –

Répondre

2

J'ai eu un coup d'œil à l'Interop et la méthode Ajouter prend un objet. Comme l'indique @icbytes, il faut un tableau pour pouvoir sortir avec un tableau d'objets en boîte. L'interop utilise double (pas float) partout donc double est probablement le type que vous voulez utiliser. Pour votre propre curiosité, vous devriez parcourir la collection ColorSamplers et voir quels types sous-jacents sont contenus à l'intérieur. La collection stocke les objets qui implémentent ColorSampler (qui contient une propriété SolidColorClass). Ainsi, si vous savez quels objets implémentent cela, vous pouvez créer ces types à transmettre à la méthode Add.

Définissez d'abord la préférence en pixels pour supposer que toutes les valeurs fournies sont basées sur des pixels.

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

merci @BrutalDev cela a fonctionné parfaitement .. merci beaucoup –

0

Selon cette page la méthode add nécessite un tableau. En passant l'argument comme quoi que ce soit d'autre va sûrement provoquer un plantage/exception:

http://cssdk.adobesites.com/sdk/1.0/docs/WebHelp/references/csawlib/com/adobe/photoshop/ColorSamplers.html

+0

merci pour le lien ... je vais essayer ce –

+0

Un tableau de quel type devrait-il être ?? int ?? float ?? Je suis coincé ... :( –

+0

essayez float.Il semble que vous avez probablement besoin de vérifier, comment UnitValue est tapé en interne – icbytes