Rdzeń API

Podstawowe API

Aspose.Imaging FOSS dla całej publicznej powierzchni .NET składa się z trzech klas: ImageProbe (statyczna fasada), ImageInfo (wartość wyniku), oraz ImageFormat (enum formatu). Ta strona opisuje, jak pasują razem jako kontrakt, poza przewodnikiem po poszczególnych funkcjach w Funkcje i możliwości.


Kontrakt trzech klas

  • ImageProbe — statyczny, bezstanowy. Każde wywołanie jest niezależne; nie ma nic do konfigurowania ani zwalniania.
  • ImageInfo — zamknięty, niezmienny. Wszystkie pięć właściwości (Format, Width, Height, BitDepth, FrameCount).
  • ImageFormat — wyliczenie z jedną wartością dla każdego rozpoznanego formatu, 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

Tworzenie ImageInfo bezpośrednio

Konstruktor ImageInfo jest publiczny — wymagany jest tylko format, wszystkie pozostałe parametry mają domyślną wartość null. Jest to przydatne w testach jednostkowych, które potrzebują zastępczego wyniku bez odczytywania rzeczywistego pliku:

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);

Nie ma odpowiadającego sposobu na mutate an ImageInfo po konstrukcji — każda właściwość jest tylko do odczytu, więc zbadany lub skonstruowany obiekt jest bezpieczny do przekazywania i buforowania bez defensywnego kopiowania.


Wybór odpowiedniego przeciążenia

OverloadUżyj, gdy
ImageProbe.ProbeFile(path)Masz ścieżkę do pliku i chcesz pełny ImageInfo
ImageProbe.Probe(stream)Masz już otwarty Stream (możliwy do przewijania lub nie) i chcesz pełny ImageInfo
ImageProbe.Probe(data)Masz już bajty w pamięci i chcesz pełny ImageInfo
ImageProbe.DetectFormat(stream) / (data)Wystarczy, że rozgałęzisz się na ImageFormat — pomiń parsowanie nagłówka poza sygnaturą formatu

ProbeFile otwiera i odczytuje plik samodzielnie — nie ma potrzeby najpierw otwierać FileStream, aby tylko wywołać Probe(stream).


Masowe sondowanie katalogu

Ponieważ ImageProbe nigdy nie zgłasza wyjątku, skanowanie katalogu może wywoływać je w ciasnej pętli bez try/catch dla każdego pliku:

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}");
}

Każdy plik, którego nagłówek nie pasuje do jednego z 11 rozpoznanych formatów, zwraca ImageFormat.Unknown zamiast zgłaszać wyjątek — powyższa pętla nigdy nie potrzebuje bloku catch.


Umowa o braku wyjątków

To nie jest przypadkowe zachowanie — jest to zamierzona część umowy API. Jeśli nagłówek rozpoznanego formatu zostanie obcięty lub jest nieprawidłowy w trakcie parsowania, ImageProbe nadal zwraca ImageInfo z Format ustawionym na format, który udało się rozpoznać; nie propaguje wyjątku parsowania do wywołującego. Gwarantowane jest tylko Format — traktuj wszystkie pozostałe właściwości jako opcjonalne, niezależnie od wykrytego formatu.


Typowe problemy

ProblemPrzyczynaRozwiązanie
Utworzony ImageInfo nie pasuje do rzeczywistego wyniku sondyRęcznie tworzone instancje nie weryfikują spójności między polamiUżywaj ręcznej konstrukcji wyłącznie dla podwójek testowych, nie jako zamiennika badania rzeczywistych plików
Wywoływanie Probe, gdy DetectFormat wystarczyłobyNiepotrzebne parsowanie nagłówka, gdy potrzebny jest tylko formatUżyj DetectFormat, jeśli nigdy nie czytasz Width/Height/BitDepth/FrameCount
Format Unknown dla pliku, który ma być obsługiwanyNagłówek nie pasuje do żadnego z 11 rozpoznanych podpisów, albo plik jest zupełnie innym formatemPotwierdź plik względem listy obsługiwanych formatów

FAQ

Czy mogę dziedziczyć po ImageInfo lub ImageProbe?

Nie. ImageInfo jest sealed, a ImageProbe jest static — żaden z nich nie jest przeznaczony do dziedziczenia ani tworzenia instancji poprzez dziedziczenie.

Czy ImageProbe jest wątkowo-bezpieczny?

ImageProbe nie przechowuje mutowalnego stanu pomiędzy wywołaniami — każde wywołanie Probe, ProbeFile lub DetectFormat jest niezależne, co sprawia, że równoczesne wywołania z wielu wątków są bezpieczne.

Czy muszę coś zwalniać?

Nie. ImageProbe nie posiada własnych zasobów IDisposable. Jeśli przekażesz Stream, który sam otworzyłeś, pozostajesz odpowiedzialny za zwolnienie tego strumienia — Probe(stream) go nie zamyka.


API Reference Podsumowanie

Klasa / MetodaOpis
ImageProbe.ProbeFile(path)Sprawdź plik według ścieżki
ImageProbe.Probe(stream)Sprawdź Stream
ImageProbe.Probe(data)Sprawdź byte[]
ImageProbe.DetectFormat(stream)Tylko format, z Stream
ImageProbe.DetectFormat(data)Tylko format, z byte[]
ImageInfo(format, width, height, bitDepth, frameCount)Publiczny konstruktor — wymagany jest tylko format
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCountWłaściwości wyniku tylko do odczytu
ImageFormatEnum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

Zobacz także

 Polski