Layers
Layers
PsdImage.Layers minden feldolgozott réteget Layer tömbként ad vissza. Minden Layer saját geometriáját, láthatóságát és kompozíciós állapotát, valamint metaadatait a csatornáiról, maszkjáról és keverési tartományairól teszi közzé.
Rétegmetaadatok olvasása
Name, Bounds (és a származtatott Width/Height/Top/Left/Bottom/Right), IsVisible, Opacity, Clipping, BlendModeKey és ChannelsCount mind közvetlenül olvashatók.
foreach (Layer layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
$"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
$"BlendMode={layer.BlendModeKey}");
}Támogatott metaadat-szerkesztések
Name, IsVisible, Opacity, Clipping, BlendModeKey, valamint a négy határél (Top/Left/Bottom/Right) helyben módosíthatók, és visszaírhatók a PsdImage.Save() segítségével.
Layer layer = image.Layers[0];
layer.Name = $"{layer.Name} (edited)";
layer.IsVisible = !layer.IsVisible;
layer.Opacity = 128;
layer.BlendModeKey = BlendMode.Multiply;
image.Save(outputPath);Csatorna- és maszkmetaadatok
ChannelInformation, LayerMaskData és LayerBlendingRangesData csak olvashatóak ebben a FOSS buildben — a setterjeik NotSupportedException kivételt dobnak.
foreach (ChannelInformation channel in layer.ChannelInformation)
{
Console.WriteLine($"Channel {channel.ChannelID}: {channel.CompressionMethod}, {channel.Length} bytes");
}
if (layer.LayerMaskData is { } mask)
{
Console.WriteLine($"Mask bounds: {mask.MaskRectangle}, flags: {mask.Flags}");
}Rétegek eltávolítása vagy átrendezése
PsdImage.Layers rendelkezik setterrel és getterrel is: egy szűrt vagy átrendezett tömb hozzárendelése felülírja a dokumentum réteggyűjteményét. Nincs nyilvános mód egy teljesen új Layer példány létrehozására, ezért ez csak a már meglévő rétegek eltávolítását vagy átrendezését támogatja — nem a teljesen új hozzáadását.
// Keep only visible layers
image.Layers = image.Layers.Where(layer => layer.IsVisible).ToArray();
image.Save(outputPath);Tippek és bevált gyakorlatok
- Az
image.Layersindexelése pozíció szerint; a tömb sorrendje megegyezik a dokumentum saját rétegsorrendjével. BlendModeKeybármelyBlendModeenum értéket elfogad — nem történik validálás a dokumentum deklarált színmódja ellen.ChannelInformation,LayerMaskDataésLayerBlendingRangesDataolvasható, de soha nem rendelhető újra.- Hívja meg a
PsdImage.Save()függvényt egyszer az összes szerkesztés után; minden hívás a teljes dokumentumot írja.
Gyakori problémák
| Probléma | Ok | Javítás |
|---|---|---|
NotSupportedException a(z) ChannelInformation, LayerMaskData vagy LayerBlendingRangesData beállításakor | Ez a három tulajdonság csak olvasható a FOSS buildben, annak ellenére, hogy van setterje | Olvasd ki az értéket; ne próbáld meg újra hozzárendelni |
LayerMaskData egy null egy réteg esetén | Nem minden rétegnek van maszk alrész | Ellenőrizze a null meglétét a használat előtt (layer.LayerMaskData is { } mask) |
FAQ
Eltávolíthatok egy réteget?
Igen — rendeld hozzá újra a image.Layers változót egy szűrt tömbhöz. Nem adhat hozzá teljesen új réteget, mivel a Layer nem rendelkezik nyilvános konstruktorral; csak a már létező, feldolgozott rétegek tarthatók, távolíthatók el vagy rendezhetők át.
Megváltoztathatom egy réteg csatorna- vagy maszkadatait?
Nem. A ChannelInformation, LayerMaskData és LayerBlendingRangesData csak olvasható — csak a Name, IsVisible, Opacity, Clipping, BlendModeKey és a határélek módosíthatók.
API Reference összefoglaló
| Osztály/Módszer | Leírás |
|---|---|
PsdImage.Layers | Lekérdezi vagy beállítja a réteggyűjteményt — csak eltávolításra/újrarendezésre állítható be |
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / Right | Támogatott rétegmetaadat-szerkesztések |
Layer.Bounds / Width / Height / ChannelsCount | Csak olvasható réteggeometria |
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesData | Csak olvasható csatorna/maszk/keverési metaadatok |