我正在使用c#(帶有Adobe Photoshop Object Library)的Photoshop插件。我試圖遍歷活動文檔中的所有像素,但是使用代碼我現在需要很長時間才能通過256x256文件中的一行像素。我想知道是否有比使用ColorSampler更好(更快)的方式?獲取像素顏色的快速方法?
這是我現在有(C++插件?): (http://forums.adobe.com/thread/290211) (C# Equivalent to this code)
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();
}
你是否在for循環中聲明變量?這可能是問題的一部分... –
謝謝!我已經將它們從for循環中移出來了,它確實加快了一點(現在是11000ms - 13000ms之前),我編輯了我的原始文章。但它仍然非常慢... – VincentC
我會假設循環本身是相當快的,所以必須有內部的東西導致它慢 - 也許使用秒錶來分析每個顏色調用。我還注意到,你每次都調用myColor.RGB - 一旦有變化就將它存儲在一個變量中?您也可以嘗試使用Parallel.For以線程方式運行循環:) – GracelessROB