1

我正在使用 c#(使用 Adob​​e Photoshop 对象库)开发一个 Photoshop 插件。我正在尝试遍历活动文档中的所有像素,但是使用我目前拥有的代码,甚至需要很长时间才能遍历 256x256 文件中的 1 行像素。我想知道是否有比使用 ColorSampler 更好(更快)的方法?(C++ 插件?)

这是我目前拥有的:(http://forums.adobe.com/thread/290211)(C# 等效于此代码

static void Main(string[] args)
{
    ps.Application app = new ps.Application();
    app.Preferences.RulerUnits = ps.PsUnits.psPixels; 

    ps.Document activeDoc = app.ActiveDocument;

    double docWidth = activeDoc.Width;
    double docHeight = activeDoc.Height;
    double xPos = 0.0D;
    double yPos = 0.0D;             

    activeDoc.ColorSamplers.RemoveAll();
    var pixelLoc = new object[] { 0.0D, 0.0D };
    ps.ColorSampler myColorSampler = activeDoc.ColorSamplers.Add(pixelLoc);

    var stopwatch = Stopwatch.StartNew();

    ps.SolidColor myColor;
    double red;
    double green;
    double blue;

    for (xPos = 0.0D; xPos <=docWidth - 1; xPos++)
    {
        myColor = myColorSampler.Color;
        red = myColor.RGB.Red;
        green = myColor.RGB.Green;
        blue = myColor.RGB.Blue;
        pixelLoc[0] = xPos;
        myColorSampler.Move(pixelLoc);
    }

    Console.WriteLine(stopwatch.ElapsedMilliseconds); //11000 ms for 1 row of 256 pixels


    Console.ReadLine();
}
4

1 回答 1

3

我以前没有使用过这个 API,但我发现了这个网站:Adobe Photoshop CS5 Object Library

我做了一些查看,并且有一个可以在 Document 对象上使用的 SaveAs 方法。您可以使用此方法将文档保存为图像(比方说 BITMAP)。

从那里,您可以使用几个在线资源来展示如何从 BMP 中快速提取像素信息。

这是一篇特别的文章:在 C# 中更快地使用位图

我意识到我没有提供复制/粘贴代码供您使用,但我希望这能指引您正确的方向。

于 2013-11-21T03:08:23.267 回答