Kern API

Kern-API

Aspose.Imaging FOSS für die gesamte öffentliche Oberfläche von .NET besteht aus drei Klassen: ImageProbe (die statische Fassade), ImageInfo (der Ergebniswert), und ImageFormat (das Format-Enum). Diese Seite erklärt, wie sie zusammen als Vertrag passen, über die Feature-für-Feature-Tour hinaus in Funktionen und Funktionalitäten.


Der Drei-Klassen-Vertrag

  • ImageProbe — statisch, zustandslos. Jeder Aufruf ist unabhängig; es gibt nichts zu konfigurieren oder zu entsorgen.
  • ImageInfo — versiegelt, unveränderlich. Alle fünf Eigenschaften (Format, Width, Height, BitDepth, FrameCount) sind nach der Konstruktion schreibgeschützt.
  • ImageFormat — ein Enum mit einem Wert pro erkanntem Format, plus Unknown.
using Aspose.Imaging.Foss;

var info = ImageProbe.ProbeFile("photo.jpg");
ImageFormat format = info.Format;   // always set
int? width = info.Width;            // set only when the format's header carries it

Direktes Erzeugen von ImageInfo

Der Konstruktor von ImageInfo ist öffentlich — nur format ist erforderlich, jeder andere Parameter hat standardmäßig den Wert null. Das ist nützlich für Unit-Tests, die ein Ersatz-Ergebnis benötigen, ohne eine echte Datei zu untersuchen:

using Aspose.Imaging.Foss;

// Fake a PNG result for a test double, with no dimensions
var fakeInfo = new ImageInfo(ImageFormat.Png);

// Fake a fully-populated result
var fullInfo = new ImageInfo(ImageFormat.Gif, width: 64, height: 48, bitDepth: 8, frameCount: 3);

Es gibt keinen entsprechenden Weg, um mutate an ImageInfo nach der Konstruktion — jede Eigenschaft ist schreibgeschützt, sodass eine abgefragte oder konstruierte Instanz sicher weitergegeben und zwischengespeichert werden kann, ohne defensive Kopien zu erstellen.


Die richtige Überladung wählen

OverloadVerwenden, wenn
ImageProbe.ProbeFile(path)Sie haben einen Dateipfad und möchten das vollständige ImageInfo
ImageProbe.Probe(stream)Sie haben bereits ein offenes Stream (suchbar oder nicht) und möchten das vollständige ImageInfo
ImageProbe.Probe(data)Sie haben die Bytes bereits im Speicher und möchten das vollständige ImageInfo
ImageProbe.DetectFormat(stream) / (data)Sie müssen nur nach ImageFormat verzweigen — überspringen Sie die Header-Analyse jenseits der Formatsignatur

ProbeFile öffnet und liest die Datei selbst — es ist nicht nötig, zuerst ein FileStream zu öffnen, nur um Probe(stream) aufzurufen.


Batch-Abfrage eines Verzeichnisses

Da ImageProbe niemals eine Ausnahme wirft, kann ein Verzeichnis-Scan es in einer engen Schleife aufrufen, ohne für jede Datei try/catch zu verwenden:

using Aspose.Imaging.Foss;

foreach (var path in Directory.GetFiles("incoming"))
{
    var info = ImageProbe.ProbeFile(path);

    if (info.Format == ImageFormat.Unknown)
    {
        Console.WriteLine($"{path}: not a recognized image format, skipping");
        continue;
    }

    Console.WriteLine($"{path}: {info.Format} {info.Width}x{info.Height}");
}

Jede Datei, deren Header nicht zu einem der 11 erkannten Formate passt, wird zu ImageFormat.Unknown aufgelöst, anstatt eine Ausnahme zu werfen — die obige Schleife benötigt niemals einen Catch-Block.


Der nie-auswerfende Vertrag

Dies ist kein zufälliges Verhalten — es ist ein bewusstes Element des API-Vertrags. Wenn der Header eines erkannten Formats während des Parsens abgeschnitten oder fehlerhaft ist, gibt ImageProbe immer noch ein ImageInfo zurück, bei dem Format auf das erkannte Format gesetzt ist; es propagiert keine Parse-Ausnahme an den Aufrufer. Nur Format ist garantiert — behandeln Sie jede andere Eigenschaft als optional, unabhängig davon, welches Format erkannt wurde.


Häufige Probleme

ProblemUrsacheLösung
Das konstruierte ImageInfo stimmt nicht mit einem echten Probeergebnis übereinManuell konstruierte Instanzen prüfen die Konsistenz zwischen Feldern nichtVerwenden Sie manuelle Konstruktion nur für Test-Doubles, nicht als Ersatz für das Untersuchen realer Dateien
Aufruf von Probe, wenn DetectFormat ausreichen würdeUnnötiges Header-Parsing, wenn nur das Format benötigt wirdVerwenden Sie DetectFormat, wenn Sie Width/Height/BitDepth/FrameCount nie lesen
Unknown-Format für eine Datei, von der Sie erwarten, dass sie unterstützt wirdHeader stimmt mit keiner der 11 erkannten Signaturen überein, oder die Datei ist ein völlig anderes FormatBestätigen Sie die Datei gegenüber dem Liste unterstützter Formate

FAQ

Kann ich ImageInfo oder ImageProbe unterklassen?

Nein. ImageInfo ist sealed und ImageProbe ist static — keiner ist für Unterklassenbildung oder Instanziierung via Vererbung vorgesehen.

Ist ImageProbe thread-sicher?

ImageProbe hält keinen veränderbaren Zustand zwischen Aufrufen — jeder Aufruf von Probe, ProbeFile oder DetectFormat ist unabhängig, sodass gleichzeitige Aufrufe aus mehreren Threads sicher sind.

Muss ich etwas freigeben?

Nein. ImageProbe hat keine eigenen IDisposable-Ressourcen. Wenn Sie ein Stream übergeben, das Sie selbst geöffnet haben, bleiben Sie für das Freigeben dieses Streams verantwortlich — Probe(stream) schließt ihn nicht.


API Reference Zusammenfassung

Klasse / MethodeBeschreibung
ImageProbe.ProbeFile(path)Datei per Pfad prüfen
ImageProbe.Probe(stream)Ein Stream prüfen
ImageProbe.Probe(data)Ein byte[] prüfen
ImageProbe.DetectFormat(stream)Nur Format, von einem Stream
ImageProbe.DetectFormat(data)Nur Format, von einem byte[]
ImageInfo(format, width, height, bitDepth, frameCount)Öffentlicher Konstruktor — nur format ist erforderlich
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCountSchreibgeschützte Ergebnis-Eigenschaften
ImageFormatEnum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

Siehe auch

 Deutsch