【问题标题】:C# Equivalent to this codeC#等价于这段代码
【发布时间】:2013-10-04 09:24:16
【问题描述】:
var xPos = new UnitValue( 0.5,'px') ;
var yPos = new UnitValue( 0.5,'px');
var pixPos = [ xPos, yPos ];

我用过这个

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);

【问题讨论】:

  • 您必须确保符合 photoshop ColorSamplers.Add() 要求的签名。简单地传输任何对象可能有点繁重,以便 Photoshop api 应该自行提取拟合数据。如果它需要上面代码中的数组,那么只需传递一个包含两个条目的浮点数组。
  • “但对我不起作用” - 它怎么不起作用?你有编译器错误,运行时异常,还是什么? ColorSamples.Add 期望什么作为参数?
  • 是的,它说异常 Illegal Argument 1 Point Value (optionally in units) expected.
  • 我找不到任何关于 Photoshop.ColorSamplers.Add () 的文档

标签: c# javascript photoshop


【解决方案1】:

我快速浏览了互操作,并且 Add 方法采用了一个对象。正如@icbytes 暗示的那样,它需要一个数组,因此您可能可以摆脱一组盒装对象。互操作使用double(不是float),所以double 可能是您想要使用的类型。

出于好奇,您应该遍历 ColorSamplers 集合并查看其中包含哪些基础类型。该集合存储实现ColorSampler 的对象(其中包含SolidColorClass 属性),因此如果您知道哪些对象实现了它,您可以创建这些类型以传递给Add 方法。

首先将首选项设置为像素,以假定您提供的所有值都是基于像素的。

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 } );

【讨论】:

    【解决方案2】:

    根据此页面,add 方法需要一个数组。将参数作为其他任何东西传递肯定会导致崩溃/异常:

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

    【讨论】:

    • 应该是什么类型的数组??诠释??漂浮 ??我被卡住了...... :(
    • 尝试浮动。看起来,您可能必须检查 UnitValue 是如何在内部输入的。
    • 浮动对我不起作用。我找不到在 C# 中使用 ColorSamplers.add() 方法的示例
    • 然后找出 UnitValue 是如何在内部键入的。您可能必须重建那种结构/对象/任何东西。
    猜你喜欢
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    相关资源
    最近更新 更多