Kärna API

Kärn-API

Aspose.Imaging FOSS för .NET s hela offentliga yta är tre klasser: ImageProbe (den statiska fasaden), ImageInfo (resultatvärdet), och ImageFormat (formatenumet). Den här sidan täcker hur de passar ihop som ett avtal, utöver den per-funktion-touren i Funktioner och funktionaliteter.


Det treklassavtalet

  • ImageProbe — statisk, tillståndslös. Varje anrop är oberoende; det finns inget att konfigurera eller avyttra.
  • ImageInfo — förseglad, oföränderlig. Alla fem egenskaper (Format, Width, Height, BitDepth, FrameCount) är skrivskyddade när de väl är konstruerade.
  • ImageFormat — en enum med ett värde per känt 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

Konstruera ImageInfo direkt

Konstruktorn för ImageInfo är publik — endast format krävs, alla andra parametrar har standardvärdet null. Detta är användbart för enhetstester som behöver ett ersättningsresultat utan att undersöka en riktig fil:

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

Det finns inget motsvarande sätt att mutate an ImageInfo efter konstruktion — varje egenskap är endast läsbar, så en sonderad eller konstruerad instans är säker att skicka runt och cacha utan defensiv kopiering.


Välja rätt overload

OverloadAnvänd när
ImageProbe.ProbeFile(path)Du har en filsökväg och vill ha den fullständiga ImageInfo
ImageProbe.Probe(stream)Du har redan en öppen Stream (sökbar eller ej) och vill ha den fullständiga ImageInfo
ImageProbe.Probe(data)Du har redan byte i minnet och vill ha hela ImageInfo
ImageProbe.DetectFormat(stream) / (data)Du behöver bara grena på ImageFormat — hoppa över header-parsing utöver format-signaturen

ProbeFile öppnar och läser filen själv — det finns ingen anledning att först öppna en FileStream bara för att anropa Probe(stream).


Batch-sondning av en katalog

Eftersom ImageProbe aldrig kastar ett undantag, kan en katalogskanning anropa den i en tät loop utan per-fil try/catch:

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

Alla filer vars header inte matchar något av de 11 erkända formaten löser upp till ImageFormat.Unknown snarare än att kasta ett undantag — loopen ovan behöver aldrig ett catch-block.


Det kontrakt som aldrig kastar undantag

Detta är inte ett tillfälligt beteende — det är en avsiktlig del av API-kontraktet. Om ett erkänt formats header är trunkerad eller felaktigt formaterad under parsning, returnerar ImageProbe fortfarande ett ImageInfo med Format satt till det format som den faktiskt kunde känna igen; det sprider inte ett parse-undantag till anroparen. Endast Format är garanterat — behandla alla andra egenskaper som valfria oavsett vilket format som upptäcktes.


Vanliga problem

ProblemOrsakLösning
Det konstruerade ImageInfo matchar inte ett riktigt provresultatManuellt konstruerade instanser validerar inte konsistensen mellan fältAnvänd endast manuell konstruktion för testdubletter, inte som en ersättning för att undersöka riktiga filer
Anropa Probe när DetectFormat skulle räckaOnödig header parsing när bara formatet behövsAnvänd DetectFormat om du aldrig läser Width/Height/BitDepth/FrameCount
Unknown format för en fil du förväntar dig ska stödjasHeader matchar ingen av de 11 igenkända signaturerna, eller så är filen ett helt annat formatBekräfta filen mot lista över stödda format

FAQ

Kan jag subklassa ImageInfo eller ImageProbe?

Nej. ImageInfo är sealed och ImageProbe är static — ingen av dem är avsedd för subklassning eller instansiering via arv.

Är ImageProbe trådsäker?

ImageProbe har inget muterbart tillstånd mellan anrop — varje anrop till Probe, ProbeFile eller DetectFormat är oberoende, vilket gör samtidiga anrop från flera trådar säkra.

Behöver jag disponera något?

Nej. ImageProbe har inga IDisposable resurser av egen natur. Om du passerar ett Stream som du själv öppnat, är du fortfarande ansvarig för att disponera den strömmen — Probe(stream) stänger den inte.


API Reference Sammanfattning

Klass / MetodBeskrivning
ImageProbe.ProbeFile(path)Undersök en fil via sökväg
ImageProbe.Probe(stream)Undersök en Stream
ImageProbe.Probe(data)Undersök en byte[]
ImageProbe.DetectFormat(stream)Endast format, från en Stream
ImageProbe.DetectFormat(data)Endast format, från en byte[]
ImageInfo(format, width, height, bitDepth, frameCount)Publik konstruktor — endast format krävs
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCountEndast läsbara resultategenskaper
ImageFormatEnum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

Se även

 Svenska