Kern API
Kern-API
Aspose.Imaging FOSS voor de volledige publieke surface van .NET bestaat uit drie klassen: ImageProbe (de statische façade), ImageInfo (de resultaatwaarde), en ImageFormat (de format-enumeratie). Deze pagina behandelt hoe ze samen passen als een contract, naast de per-feature tour in Functies en Functionaliteiten.
Het contract met drie klassen
ImageProbe— statisch, staatloos. Elke oproep is onafhankelijk; er is niets te configureren of vrij te geven.ImageInfo— sealed, immutable. Alle vijf eigenschappen (Format,Width,Height,BitDepth,FrameCount) zijn alleen-lezen nadat ze zijn geconstrueerd.ImageFormat— een enum met één waarde per herkend formaat, 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 itDirect ImageInfo construeren
De constructor van ImageInfo is openbaar — alleen format is vereist, elke andere parameter standaard naar null. Dit is handig voor unit-tests die een vervangend resultaat nodig hebben zonder een echt bestand te onderzoeken:
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);Er is geen overeenkomstige manier om mutate an ImageInfo na constructie — elke eigenschap is alleen-lezen, dus een opgezochte of geconstrueerde instantie is veilig om rond te geven en te cachen zonder defensief kopiëren.
De juiste overload kiezen
| Overload | Gebruik wanneer |
|---|---|
ImageProbe.ProbeFile(path) | Je hebt een bestandspad en wilt de volledige ImageInfo |
ImageProbe.Probe(stream) | Je hebt al een geopende Stream (zoekbaar of niet) en wilt de volledige ImageInfo |
ImageProbe.Probe(data) | Je hebt de bytes al in het geheugen en wilt de volledige ImageInfo |
ImageProbe.DetectFormat(stream) / (data) | Je hoeft alleen te branchen op ImageFormat — sla header parsing voorbij de formatsignatuur over |
ProbeFile opent en leest het bestand zelf — het is niet nodig eerst een FileStream te openen alleen om Probe(stream) aan te roepen.
Batch-probing van een map
Omdat ImageProbe nooit een uitzondering werpt, kan een map-scan het in een strakke lus aanroepen zonder per-bestand 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}");
}Elk bestand waarvan de header niet overeenkomt met een van de 11 herkende formaten, wordt opgelost naar ImageFormat.Unknown in plaats van een uitzondering te werpen — de bovenstaande lus heeft nooit een catch-blok nodig.
Het nooit-gooien contract
Dit is geen incidenteel gedrag — het is een bewuste onderdeel van het API contract. Als de header van een herkend formaat gedeeltelijk is afgekapt of onjuist is tijdens het ontleden, retourneert ImageProbe nog steeds een ImageInfo met Format ingesteld op het formaat dat het wel herkende; het propageert geen parse-exception naar de aanroeper. Alleen Format is gegarandeerd — beschouw elke andere eigenschap als optioneel, ongeacht welk formaat werd gedetecteerd.
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
Gegenereerde ImageInfo komt niet overeen met een echt probe result | Handmatig geconstrueerde instanties valideren de consistentie tussen velden niet | Gebruik handmatige constructie alleen voor testdubbels, niet als vervanging voor het onderzoeken van echte bestanden |
Het aanroepen van Probe wanneer DetectFormat volstaat | Onnodige headerparsing wanneer alleen het formaat nodig is | Gebruik DetectFormat als je nooit Width/Height/BitDepth/FrameCount leest |
Unknown formaat voor een bestand waarvan je verwacht dat het wordt ondersteund | Header komt niet overeen met een van de 11 herkende handtekeningen, of het bestand is volledig een ander formaat | Bevestig het bestand tegen de lijst met ondersteunde formaten |
FAQ
Kan ik ImageInfo of ImageProbe subklassen?
Nee. ImageInfo is sealed en ImageProbe is static — geen van beide is ontworpen voor subclassing of instantiering via overerving.
Is ImageProbe thread-safe?
ImageProbe houdt geen mutable staat tussen oproepen — elke oproep aan Probe, ProbeFile of DetectFormat is onafhankelijk, waardoor gelijktijdige oproepen vanuit meerdere threads veilig zijn.
Moet ik iets opruimen?
Nee. ImageProbe heeft geen IDisposable resources van zichzelf. Als je een Stream doorgeeft die je zelf hebt geopend, blijf je verantwoordelijk voor het vrijgeven van die stream — Probe(stream) sluit deze niet.
API Reference Samenvatting
| Klasse / Methode | Beschrijving |
|---|---|
ImageProbe.ProbeFile(path) | Onderzoek een bestand op pad |
ImageProbe.Probe(stream) | Onderzoek een Stream |
ImageProbe.Probe(data) | Onderzoek een byte[] |
ImageProbe.DetectFormat(stream) | Alleen formaat, van een Stream |
ImageProbe.DetectFormat(data) | Alleen formaat, van een byte[] |
ImageInfo(format, width, height, bitDepth, frameCount) | Publieke constructor — alleen format is vereist |
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCount | Alleen-lezen resultaat-eigenschappen |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |