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, plusUnknown.
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 itKonstruera 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
| Overload | Anvä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
| Problem | Orsak | Lösning |
|---|---|---|
Det konstruerade ImageInfo matchar inte ett riktigt provresultat | Manuellt konstruerade instanser validerar inte konsistensen mellan fält | Anvä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äcka | Onödig header parsing när bara formatet behövs | Använd DetectFormat om du aldrig läser Width/Height/BitDepth/FrameCount |
Unknown format för en fil du förväntar dig ska stödjas | Header matchar ingen av de 11 igenkända signaturerna, eller så är filen ett helt annat format | Bekrä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 / Metod | Beskrivning |
|---|---|
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 / .FrameCount | Endast läsbara resultategenskaper |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |