我有一些 4k 图像(.png,3840p*2160p),我想在其中替换大约 2500 种颜色。
我有一个包含 2500 种当前颜色的 Color[] 数组和一个包含 2500 种始终不同的新颜色的数组。
目前我有一个 System.Drawing.Imaging.ColorMap 数组,我在其中推送 2500 个单个 ColorMap 对象,它们各自的 OldColor 和 NewColor 属性设置为我其他数组中的每个值。
然后我可以执行以下操作:
[...]
ImageAttributes imageAttributes = new ImageAttributes();
imageAttributes.SetRemapTable(colorMapArray);
Rectangle rectangle = new Rectangle(0, 0, myImage.Width, myImage.Height);
Graphics graphics = Graphics.FromImage(myImage);
graphics.DrawImage(myImage, rectangle, 0, 0, myImage.Width, myImage.Height, GraphicsUnit.Pixel, imageAttributes);
myImage.Save("myImageWithReplacedColors.png");
这在技术上有效并用它们的新值替换了我所有的颜色,但它非常非常慢。(最多需要几秒钟)
我有哪些选择可以加快这个过程?..或其他方式获得相同的结果?我一直在寻找几天,但还没有真正找到任何东西
如果这有帮助,4k 图像和应替换的具有当前颜色的阵列始终相同。所以我可以将它们特殊保存,例如作为字节数组(?)