Class SmartObjectLayer

SmartObjectLayer class

Definiert die SmartObjectLayer-Klasse, die in der PSD-Datei eingebettete oder verknüpfte Smart-Objekte in der externen Datei enthält. Mit Smart-Objekten können Sie: zerstörungsfreie Transformationen durchführen. Sie können eine Ebene skalieren, drehen, neigen, verzerren, perspektivisch transformieren oder verzerren , ohne die Originalbilddaten oder -qualität zu verlieren, da die Transformationen die Originaldaten nicht beeinflussen. Arbeiten Sie mit Vektordaten, z. B. Vektorgrafiken aus Illustrator, andernfalls würde gerastert werden. Führen Sie zerstörungsfreie Filterung durch. Sie können auf Smart Objects angewendete Filter jederzeit bearbeiten. Bearbeiten Sie ein Smart Object und aktualisieren Sie automatisch alle seine verknüpften Instanzen. Wenden Sie eine Ebenenmaske an, die entweder mit der Smart Object-Ebene verknüpft oder nicht verknüpft ist. Probieren Sie verschiedene Designs mit niedrigen Auflösung Platzhalterbilder, die Sie später durch endgültige Versionen ersetzen. In Adobe� Photoshop� können Sie den Inhalt eines Bildes in ein PSD-Dokument einbetten. Weitere Informationen finden Sie hier:https://helpx.adobe.com/photoshop/using/create-smart-objects.html Ein Layer mit einem eingebetteten Smart-Objekt enthält platzierte (PlLd) und SoLd-Ressourcen mit Smart-Objekt-Eigenschaften. Die PlLd-Ressource kann für PSD-Versionen älter als 10 alleine sein. Diese Ressourcen enthalten die UniqueId der LiFdDataSource in der globalen Lnk2Resource mit der eingebetteten filename und andere Parameter, einschließlich der eingebetteten Dateiinhalte im Originalformat als Byte-Array.

public class SmartObjectLayer : Layer

Eigenschaften

NameBeschreibung
AutoAdjustPalette { get; set; }Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob die Palette automatisch angepasst wird.
virtual BackgroundColor { get; set; }Ruft einen Wert für die Hintergrundfarbe ab oder legt ihn fest.
override BitsPerPixel { get; }Ruft die Anzahl der Bildbits pro Pixel ab.
BlendingOptions { get; }Ruft die Mischoptionen ab.
virtual BlendModeKey { get; set; }Ruft den Mischmodusschlüssel ab oder legt ihn fest.
BlendModeSignature { get; }Ruft die Mischmodus-Signatur ab.
Bottom { get; set; }Ruft die Position der untersten Ebene ab oder legt sie fest.
Bounds { get; }Ruft die Bildgrenzen ab.
BufferSizeHint { get; set; }Ruft den Puffergrößenhinweis ab oder legt ihn fest, der als maximal zulässige Größe für alle internen Puffer definiert ist.
ChannelInformation { get; set; }Ruft die Kanalinformationen ab oder legt sie fest.
ChannelsCount { get; }Ruft die Anzahl der Kanäle der Ebene ab.
Clipping { get; set; }Holt oder setzt das Layer-Clipping. 0 = Basis, 1 = Nicht-Basis.
Container { get; }Ruft die abImage Container.
Contents { get; set; }Ruft den Inhalt der Smart-Objekt-Ebene ab oder legt ihn fest. Der Inhalt des eingebetteten Smart-Objekts ist die eingebettete Rohbilddatei:Data und seine Eigenschaften. Der Inhalt des verknüpften Smart-Objekts ist der Rohinhalt der verknüpften Bilddatei, sofern verfügbar, und seine Eigenschaften:LiFeDataSource . Wir unterstützen das Laden aus der Adobe� Photoshop� �� Grafikbibliothek nicht, wennIsLibraryLink ist wahr. Für normale Link-Dateien verwenden wir zunächstRelativePath um die Datei relativ zum Quellbildpfad zu suchenSourceImagePath , wenn es nicht verfügbar ist, schauen wir uns anFullPath , Wenn nicht, suchen wir die Linkdatei im selben Verzeichnis, in dem sich unser Bild befindet:SourceImagePath .
ContentsBounds { get; set; }Ruft die Grenzen des Smart-Objekt-Inhalts ab oder legt sie fest.
ContentsSource { get; set; }Ruft die Quelle des Smart-Objekt-Inhalts ab oder legt sie fest.
ContentType { get; }Ruft den Typ des Inhalts der Smart-Objekt-Ebene ab. Der Inhalt des eingebetteten Smart-Objekts ist die eingebettete Rohbilddatei:Data . Der Inhalt des verknüpften Smart-Objekts ist der Rohinhalt der verknüpften Bilddatei, sofern verfügbar:LiFeDataSource . Wir unterstützen das Laden aus der Adobe� Photoshop� �� Grafikbibliothek nicht, wennIsLibraryLink ist wahr. Für normale Link-Dateien verwenden wir zunächstRelativePath um die Datei relativ zum Quellbildpfad zu suchenSourceImagePath , wenn es nicht verfügbar ist, schauen wir uns anFullPath , Wenn nicht, suchen wir die Linkdatei im selben Verzeichnis, in dem sich unser Bild befindet:SourceImagePath .
DataStreamContainer { get; }Ruft den Datenstrom des Objekts ab.
DisplayName { get; set; }Ruft den Anzeigenamen der Ebene ab oder legt ihn fest.
Disposed { get; }Ruft einen Wert ab, der angibt, ob diese Instanz verworfen wird.
ExtraLength { get; }Ruft die Schicht-Zusatzinformationslänge in Bytes ab.
virtual FileFormat { get; }Ruft einen Wert von Dateiformat ab
Filler { get; set; }Ruft den Ebenenfüller ab oder legt ihn fest.
FillOpacity { get; set; }Ruft die Deckkraft der Füllung ab oder legt sie fest.
Flags { get; set; }Ruft die Layer-Flags ab oder setzt sie. Bit 0 = Transparenz geschützt; Bit 1 = sichtbar; Bit 2 = veraltet; Bit 3 = 1 für Photoshop 5.0 und höher, gibt an, ob Bit 4 nützliche Informationen enthält; Bit 4 = Pixeldaten sind für das Erscheinungsbild des Dokuments irrelevant.
override HasAlpha { get; }Ruft einen Wert ab, der angibt, ob diese Instanz alpha hat.
virtual HasBackgroundColor { get; set; }Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob das Bild eine Hintergrundfarbe hat.
virtual HasTransparentColor { get; set; }Ruft einen Wert ab, der angibt, ob das Bild eine transparente Farbe hat.
override Height { get; }Ruft die Bildhöhe ab.
virtual HorizontalResolution { get; set; }Ermittelt oder setzt die horizontale Auflösung davon in Pixel pro ZollRasterImage .
virtual ImageOpacity { get; }Ruft die Deckkraft dieses Bildes ab.
InterruptMonitor { get; set; }Holt oder setzt den Interrupt-Monitor.
override IsCached { get; }Ruft einen Wert ab, der angibt, ob Bilddaten derzeit zwischengespeichert werden.
IsRawDataAvailable { get; }Ruft einen Wert ab, der angibt, ob das Laden von Rohdaten verfügbar ist.
IsVisible { get; set; }Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob die Ebene sichtbar ist
virtual IsVisibleInGroup { get; }Ruft einen Wert ab, der angibt, ob diese Instanz in der Gruppe sichtbar ist (Wenn die Ebene nicht in der Gruppe ist, bedeutet dies die Stammgruppe).
LayerBlendingRangesData { get; set; }Ruft die Daten der Ebenenüberblendungsbereiche ab oder legt sie fest.
LayerCreationDateTime { get; set; }Ruft die Uhrzeit der Erstellung des Layers ab oder legt sie fest.
LayerLock { get; set; }Ruft die Layer-Sperre ab oder setzt sie. Beachten Sie, dass wenn das Flag LayerFlags.TransparencyProtected gesetzt ist, es durch das Layer-Sperr-Flag überschrieben wird. Um das LayerFlags.TransparencyProtected-Flag zurückzugeben, muss die Layer-Option layer.Flags |= LayerFlags.TransparencyProtected angewendet werden
LayerMaskData { get; set; }Ruft die Ebenenmaskendaten ab oder legt sie fest.
LayerOptions { get; }Ruft die Ebenenoptionen ab.
Left { get; set; }Holt oder setzt die Position der linken Ebene.
Length { get; }Ruft die Gesamtschichtlänge in Bytes ab.
Name { get; set; }Ruft den Ebenennamen ab oder legt ihn fest.
Opacity { get; set; }Holt oder setzt die Deckkraft der Ebene. 0 = transparent, 255 = undurchsichtig.
Palette { get; set; }Ruft die Farbpalette ab oder legt sie fest. Die Farbpalette wird nicht verwendet, wenn Pixel direkt dargestellt werden.
virtual PremultiplyComponents { get; set; }Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob die Bildkomponenten vormultipliziert werden müssen.
RawCustomColorConverter { get; set; }Ruft den benutzerdefinierten Farbkonverter ab oder legt ihn fest
virtual RawDataFormat { get; }Ruft das Rohdatenformat ab.
RawDataSettings { get; }Ruft die aktuellen Rohdateneinstellungen ab. Beachten Sie, dass bei Verwendung dieser Einstellungen die Daten ohne Konvertierung geladen werden.
RawFallbackIndex { get; set; }Ruft den Fallback-Index ab oder legt ihn fest, der verwendet werden soll, wenn der Palettenindex außerhalb der Grenzen liegt
RawIndexedColorConverter { get; set; }Holt oder setzt den indizierten Farbkonverter
virtual RawLineSize { get; }Ruft die rohe Zeilengröße in Bytes ab.
Resources { get; set; }Ruft die Layer-Ressourcen ab oder legt sie fest.
Right { get; set; }Holt oder setzt die richtige Layerposition.
SheetColorHighlight { get; set; }Holt oder setzt die Hervorhebung der Dekorationsblattfarbe in der Ebenenliste
Size { get; }Ruft die Bildgröße ab.
SmartFilters { get; }Ruft die intelligenten Filter ab.
SmartObjectProvider { get; }Ruft den Smart-Objekt-Anbieter ab.
Top { get; set; }Ruft die Position der obersten Ebene ab oder legt sie fest.
virtual TransparentColor { get; set; }Ruft die transparente Farbe des Bildes ab.
virtual UpdateXmpData { get; set; }Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob die XMP-Metadaten aktualisiert werden sollen.
virtual UseRawData { get; set; }Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob das Laden von Rohdaten verwendet werden soll, wenn das Laden von Rohdaten verfügbar ist.
virtual VerticalResolution { get; set; }Ermittelt oder setzt die vertikale Auflösung davon in Pixel pro ZollRasterImage .
override Width { get; }Ruft die Bildbreite ab.
virtual XmpData { get; set; }Ruft die XMP-Metadaten ab oder legt sie fest.

Methoden

NameBeschreibung
AddLayerMask(LayerMaskData)Fügt die Maske der aktuellen Ebene hinzu.
override AdjustBrightness(int)Anpassen einer Helligkeit für das Bild.
override AdjustContrast(float)Bildkontrast
override AdjustGamma(float)Gamma-Korrektur eines Bildes.
override AdjustGamma(float, float, float)Gamma-Korrektur eines Bildes.
override BinarizeBradley(double)Binarisierung eines Bildes mit Bradleys adaptivem Schwellenwertalgorithmus unter Verwendung des integralen Bildschwellenwerts
override BinarizeBradley(double, int)Binarisierung eines Bildes mit Bradleys adaptivem Schwellenwertalgorithmus unter Verwendung des integralen Bildschwellenwerts
override BinarizeFixed(byte)Binarisierung eines Bildes mit vordefiniertem Schwellwert
override BinarizeOtsu()Binarisierung eines Bildes mit Otsu-Thresholding
override CacheData()Zwischenspeichert die Daten und stellt sicher, dass kein zusätzliches Laden von Daten aus der zugrunde liegenden Datei durchgeführt wirdDataStreamContainer .
CanSave(ImageOptionsBase)Legt fest, ob das Bild in dem angegebenen Dateiformat gespeichert werden kann, das durch die übergebenen Speicheroptionen repräsentiert wird.
ConvertToLinked(string)Konvertiert dieses eingebettete Smart-Objekt in ein verknüpftes Smart-Objekt.
override Crop(Rectangle)Bild zuschneiden.
virtual Crop(int, int, int, int)Bild mit Verschiebungen zuschneiden.
Dispose()Verwirft die aktuelle Instanz.
Dither(DitheringMethod, int)Führt Dithering auf dem aktuellen Bild durch.
override Dither(DitheringMethod, int, IColorPalette)Führt Dithering auf dem aktuellen Bild durch.
DrawImage(Point, RasterImage)Zeichnet das Bild auf Ebene.
DuplicateLayer()Erstellt eine neue Smart-Objekt-Ebene durch Kopieren dieser. Beachten Sie, dass für eingebettete Smart-Objekte das eingebettete Bild geteilt wird. Wenn Sie das eingebettete Bild kopieren möchten, verwenden SieNewSmartObjectViaCopy Methode.
EmbedLinked()Bettet das verknüpfte Smart-Objekt in diese Ebene ein.
ExportContents(string)Exportiert die eingebetteten oder verlinkten Inhalte in eine Datei.
virtual Filter(Rectangle, FilterOptionsBase)Filtert das angegebene Rechteck.
GetArgb32Pixel(int, int)Ruft ein 32-Bit-ARGB-Pixelbild ab.
GetDefaultArgb32Pixels(Rectangle)Ruft das standardmäßige 32-Bit-ARGB-Pixel-Array ab.
virtual GetDefaultOptions(object[])Ruft die Standardoptionen ab.
GetDefaultPixels(Rectangle, IPartialArgb32PixelLoader)Ruft das Standard-Pixel-Array mit partiellem Pixel-Loader ab.
GetDefaultRawData(Rectangle, RawDataSettings)Ruft das Standard-Rohdatenarray ab.
GetDefaultRawData(Rectangle, IPartialRawDataLoader, RawDataSettings)Ruft das Standard-Rohdaten-Array mit partiellem Pixel-Loader ab.
override GetHashCode()Gibt einen Hash-Code für diese Instanz zurück.
virtual GetModifyDate(bool)Ruft das Datum und die Uhrzeit ab, zu der das Ressourcenbild zuletzt geändert wurde.
virtual GetOriginalOptions()Ruft die Optionen basierend auf den ursprünglichen Dateieinstellungen ab. Dies kann hilfreich sein, um die Bittiefe und andere Parameter des Originalbildes unverändert zu lassen. Zum Beispiel, wenn wir ein schwarz-weißes PNG-Bild mit 1 Bit pro Pixel laden und dann Speichern Sie es mit the Save -Methode wird das ausgegebene PNG-Bild mit 8 Bit pro Pixel erzeugt. Um dies zu vermeiden und das PNG-Bild mit 1 Bit pro Pixel zu speichern, verwenden Sie diese Methode, um entsprechende Speicheroptionen zu erhalten, und übergeben Sie sie an dieSaveMethode als zweiten Parameter.
GetPixel(int, int)Ruft ein Bildpixel ab.
GetSkewAngle()Ruft den Schräglaufwinkel ab. Diese Methode ist auf gescannte Textdokumente anwendbar, um den Schräglaufwinkel beim Scannen zu bestimmen.
override Grayscale()Transformation eines Bildes in seine Graustufendarstellung
LoadArgb32Pixels(Rectangle)Lädt 32-Bit-ARGB-Pixel.
LoadArgb64Pixels(Rectangle)Lädt 64-Bit-ARGB-Pixel.
LoadCmyk32Pixels(Rectangle)Lädt Pixel im CMYK-Format.
LoadContents(LoadOptions)Ruft die eingebetteten oder verknüpften Bildinhalte der Smart-Objekt-Ebene ab.
LoadPartialArgb32Pixels(Rectangle, IPartialArgb32PixelLoader)Lädt 32-Bit-ARGB-Pixel teilweise nach Paketen.
LoadPartialPixels(Rectangle, IPartialPixelLoader)Lädt Pixel teilweise nach Paketen.
LoadPixels(Rectangle)Lädt Pixel.
LoadRawData(Rectangle, RawDataSettings, IPartialRawDataLoader)Lädt Rohdaten.
LoadRawData(Rectangle, Rectangle, RawDataSettings, IPartialRawDataLoader)Lädt Rohdaten.
virtual MergeLayerTo(Layer)Führt die Ebene mit der angegebenen Ebene zusammen
NewSmartObjectViaCopy()Erstellt eine neue Smart-Objekt-Ebene durch Kopieren dieser Ebene. Reproduziert die Funktionalität „Ebene -> Smart-Objekte -> Neues Smart-Objekt über Kopieren“ von Adobe� Photoshop�. Beachten Sie, dass dies aufgrund des eingebetteten Bildes nur für eingebettete Smart-Objekte aktiviert ist wird ebenfalls kopiert. Wenn Sie das eingebettete Bild teilen möchten, verwenden Sie esDuplicateLayer Methode.
NormalizeAngle()Normalisiert den Winkel. Diese Methode ist auf gescannte Textdokumente anwendbar, um den schiefen Scan zu beseitigen. Diese Methode verwendetGetSkewAngle UndRotate Methoden.
virtual NormalizeAngle(bool, Color)Normalisiert den Winkel. Diese Methode ist auf gescannte Textdokumente anwendbar, um den schiefen Scan zu beseitigen. Diese Methode verwendetGetSkewAngle UndRotate Methoden.
ReadArgb32ScanLine(int)Liest die gesamte Scanzeile mit dem angegebenen Scanzeilenindex.
ReadScanLine(int)Liest die gesamte Scanzeile mit dem angegebenen Scanzeilenindex.
RelinkToFile(string)Verknüpft das verknüpfte Smart-Objekt erneut mit einer neuen Datei. Es besteht keine Notwendigkeit, die UpdateModifiedContent-Methode danach aufzurufen.
ReplaceColor(Color, byte, Color)Ersetzt eine Farbe durch eine andere mit zulässigem Unterschied und behält den ursprünglichen Alpha-Wert bei, um glatte Kanten zu erhalten.
virtual ReplaceColor(int, byte, int)Ersetzt eine Farbe durch eine andere mit zulässigem Unterschied und behält den ursprünglichen Alpha-Wert bei, um glatte Kanten zu erhalten.
ReplaceContents(Image)Ersetzt die in die Smart-Objekt-Ebene eingebetteten Smart-Objekt-Inhalte.
ReplaceContents(string)Ersetzt den Inhalt durch eine Datei. Es besteht keine Notwendigkeit, die UpdateModifiedContent-Methode danach aufzurufen.
ReplaceContents(Image, ResolutionSetting)Ersetzt die in die Smart-Objekt-Ebene eingebetteten Smart-Objekt-Inhalte.
ReplaceContents(string, ResolutionSetting)Ersetzt den Inhalt durch eine Datei. Es besteht keine Notwendigkeit, die UpdateModifiedContent-Methode danach aufzurufen.
ReplaceNonTransparentColors(Color)Ersetzt alle nicht transparenten Farben durch neue Farben und behält den ursprünglichen Alpha-Wert bei, um glatte Kanten zu erhalten. Hinweis: Wenn Sie es auf Bildern ohne Transparenz verwenden, werden alle Farben durch eine einzige ersetzt.
virtual ReplaceNonTransparentColors(int)Ersetzt alle nicht transparenten Farben durch neue Farben und behält den ursprünglichen Alpha-Wert bei, um glatte Kanten zu erhalten. Hinweis: Wenn Sie es auf Bildern ohne Transparenz verwenden, werden alle Farben durch eine einzige ersetzt.
Resize(int, int)Ändert die Bildgröße. Der StandardLeftTopToLeftTopwird verwendet.
override Resize(int, int, ImageResizeSettings)Ändert die Bildgröße.
override Resize(int, int, ResizeType)Ändert die Bildgröße.
ResizeHeightProportionally(int)Ändert die Höhe proportional.
virtual ResizeHeightProportionally(int, ImageResizeSettings)Ändert die Höhe proportional.
virtual ResizeHeightProportionally(int, ResizeType)Ändert die Höhe proportional.
ResizeWidthProportionally(int)Ändert die Breite proportional.
virtual ResizeWidthProportionally(int, ImageResizeSettings)Ändert die Breite proportional.
virtual ResizeWidthProportionally(int, ResizeType)Ändert die Breite proportional.
virtual Rotate(float)Bild um die Mitte drehen.
override Rotate(float, bool, Color)Bild um die Mitte drehen.
override RotateFlip(RotateFlipType)Dreht, kippt oder dreht und kippt das Bild.
Save()Speichert die Bilddaten im zugrunde liegenden Stream.
override Save(Stream)Speichert die Daten des Objekts im angegebenen Stream.
Save(string)Speichert die Daten des Objekts am angegebenen Dateispeicherort.
Save(Stream, ImageOptionsBase)Speichert die Bilddaten gemäß den Speicheroptionen im angegebenen Stream im angegebenen Dateiformat.
override Save(string, bool)Speichert die Daten des Objekts am angegebenen Dateispeicherort.
override Save(string, ImageOptionsBase)Speichert die Daten des Objekts am angegebenen Speicherort im angegebenen Dateiformat gemäß den Speicheroptionen.
override Save(Stream, ImageOptionsBase, Rectangle)Speichert die Bilddaten gemäß den Speicheroptionen im angegebenen Stream im angegebenen Dateiformat.
override Save(string, ImageOptionsBase, Rectangle)Speichert die Daten des Objekts am angegebenen Speicherort im angegebenen Dateiformat gemäß den Speicheroptionen.
SaveArgb32Pixels(Rectangle, int[])Speichert die 32-Bit-ARGB-Pixel.
SaveCmyk32Pixels(Rectangle, int[])Speichert die Pixel.
SavePixels(Rectangle, Color[])Speichert die Pixel.
SaveRawData(byte[], int, Rectangle, RawDataSettings)Speichert die Rohdaten.
SetArgb32Pixel(int, int, int)Legt ein 32-Bit-ARGB-Bildpixel für die angegebene Position fest.
override SetPalette(IColorPalette, bool)Legt die Bildpalette fest.
SetPixel(int, int, Color)Setzt ein Bildpixel für die angegebene Position.
virtual SetResolution(double, double)Legt die Auflösung dafür festRasterImage .
ShallowCopy()Erstellt eine flache Kopie der aktuellen Ebene. Bittehttps://msdn.microsoft.com/ru-ru/library/system.object.memberwiseclone(v=vs.110).aspx zur Erklärung.
virtual ToBitmap()Konvertiert Rasterbild in Bitmap.
UpdateModifiedContent()Aktualisiert den Bild-Cache der Smart-Objekt-Ebene mit dem geänderten Inhalt.
WriteArgb32ScanLine(int, int[])Schreibt die gesamte Scanzeile in den angegebenen Scanzeilenindex.
WriteScanLine(int, Color[])Schreibt die gesamte Scanzeile in den angegebenen Scanzeilenindex.

Beispiele

Der folgende Code demonstriert die Unterstützung eingebetteter Smart-Objekte.

[C#]

void AssertAreEqual(object actual, object expected)
{
    if (!object.Equals(actual, expected))
    {
        throw new FormatException(string.Format("Actual value {0} are not equal to expected {1}.", actual, expected));
    }
}

// Dieses Beispiel zeigt, wie die Smart-Objekt-Ebene in der PSD-Datei geändert und der ursprünglich eingebettete Inhalt des Smart-Objekts exportiert/aktualisiert wird.
const int left = 0;
const int top = 0;
const int right = 0xb;
const int bottom = 0x10;
FileFormat[] formats = new[]
{
    FileFormat.Png, FileFormat.Psd, FileFormat.Bmp, FileFormat.Jpeg, FileFormat.Gif, FileFormat.Tiff, FileFormat.Jpeg2000
};
foreach (FileFormat format in formats)
{
    string formatString = format.ToString().ToLowerInvariant();
    string formatExt = format == FileFormat.Jpeg2000 ? "jpf" : formatString;
    string fileName = "r-embedded-" + formatString;
    string sourceFilePath = fileName + ".psd";
    string pngOutputPath = fileName + "_output.png";
    string psdOutputPath = fileName + "_output.psd";
    string png2OutputPath = fileName + "_updated.png";
    string psd2OutputPath = fileName + "_updated.psd";
    string exportPath = fileName + "_export." + formatExt;
    using (PsdImage image = (PsdImage)Image.Load(sourceFilePath))
    {
        var smartObjectLayer = (SmartObjectLayer)image.Layers[0];

        AssertAreEqual(left, smartObjectLayer.ContentsBounds.Left);
        AssertAreEqual(top, smartObjectLayer.ContentsBounds.Top);
        AssertAreEqual(right, smartObjectLayer.ContentsBounds.Right);
        AssertAreEqual(bottom, smartObjectLayer.ContentsBounds.Bottom);

        // Lassen Sie uns das eingebettete Smart-Objekt-Bild aus der PSD-Smart-Objekt-Ebene exportieren
        smartObjectLayer.ExportContents(exportPath);

        // Prüfen wir, ob das Originalbild korrekt gespeichert wurde
        image.Save(psdOutputPath, new PsdOptions(image));
        image.Save(pngOutputPath, new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha });

        using (var innerImage = (RasterImage)smartObjectLayer.LoadContents(null))
        {
            AssertAreEqual(format, innerImage.FileFormat);

            // Lassen Sie uns das ursprüngliche Smart-Objekt-Bild invertieren
            var pixels = innerImage.LoadArgb32Pixels(innerImage.Bounds);
            for (int i = 0; i < pixels.Length; i++)
            {
                var pixel = pixels[i];
                var alpha = (int)(pixel & 0xff000000);
                pixels[i] = (~(pixel & 0x00ffffff)) | alpha;
            }

            innerImage.SaveArgb32Pixels(innerImage.Bounds, pixels);

            // Lassen Sie uns das eingebettete Smart-Objekt-Bild in der PSD-Ebene ersetzen
            smartObjectLayer.ReplaceContents(innerImage);
        }

        // Prüfen wir, ob das aktualisierte Bild korrekt gespeichert wird
        image.Save(psd2OutputPath, new PsdOptions(image));
        image.Save(png2OutputPath, new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha });
    }
}

Siehe auch