问题描述
我正在使用 PSDPlugin 库 (https://www.psdplugin.com/) 加载和编辑 photoshop psd 文件。
在某些情况下,我需要复制一个图层。您可以像这样访问图层:
var psd = new PsdFile("path to psd",new LoadContext { Encoding = Encoding.Unicode });
var layer = psd.Layers.First(x => x.Name == "01");
我需要复制这个图层,并稍作改动将其添加到图层列表中。我尝试了深度克隆技术,但只要图层类没有标记为 Serializable
,它就无法工作。
我还尝试更改源代码,我制作了每个需要的类 Serializable
,但有一些内部类和属性使用不是 Serializable
的本机 .NET 库。
我也尝试了一个技巧。我再次将目标图层添加到图层列表中,如下所示:
var psd = new PsdFile("path to psd",new LoadContext { Encoding = Encoding.Unicode });
var layer = psd.Layers.First(x => x.Name == "01");
psd.Layers.Add(layer);
现在我复制了 psd 中的图层。然后我试着像这样得到最后一个:
var newlayer = psd.Layers.Last(x => x.Name == "01");
newlayer.Visible = true;
但是当我让它可见时,第一层也将可见!所以它们通过类引用相互链接:(
图层对象有一个名为“Save”的方法,可以将图层保存到PSDBinaryWriter
中,然后您可以使用PSDNBinaryReader
创建一个新图层。但是我没有成功使用它们,我会收到这个错误:
var stream = new MemoryStream();
var writer = new PsdBinaryWriter(stream,Encoding.Unicode);
layer.Save(writer);
var newLayer = new Layer(new PsdBinaryReader(stream,Encoding.Unicode),psd);
错误:System.IO.EndOfStreamException: 'Unable to read beyond the end of the stream.'
非常感谢任何帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)