Kenmerken en functionaliteiten
Functies en functionaliteiten
Deze pagina behandelt elk functiegebied van Aspose.Imaging FOSS voor .NET’s format-detectie en header-onderzoek API, met werkende C# voorbeelden. De bibliotheek decodeert nooit pixelgegevens — elke methode leest alleen de bestandsheader.
Formaatdetectie
ImageProbe is het statische toegangspunt. Drie overloads behandelen een bestandspad, een stream en een ruwe byte-array:
using Aspose.Imaging.Foss;
var fromPath = ImageProbe.ProbeFile("photo.jpg");
var fromBytes = ImageProbe.Probe(byteArray);
var fromStream = ImageProbe.Probe(stream);
var formatOnly = ImageProbe.DetectFormat(byteArray); // ImageFormat only, no header parseGebruik DetectFormat wanneer je alleen op basis van het formaat wilt vertakken; gebruik Probe/ProbeFile wanneer je ook dimensies, kleurdiepte of frame-aantal nodig hebt.
Header-metadata lezen
ProbeFile/Probe retourneren een ImageInfo met nullable Width, Height, BitDepth en FrameCount — elk alleen ingevuld wanneer de header van het gedetecteerde formaat die waarde daadwerkelijk bevat:
var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}Format (een ImageFormat enum-waarde) wordt altijd ingesteld zodra de header is herkend — het is het enige veld dat gegarandeerd wordt gevuld.
Per-Formaat Notities
Een paar formaten hebben header-eigenaardigheden die ImageInfo normaliseert of direct blootlegt:
| Formaat | Behavior |
|---|---|
| GIF | FrameCount geeft het aantal frames weer wanneer het bestand meerdere frames bevat; weggelaten als het aantal niet kan worden bepaald |
| BMP | Een negatieve hoogte in de header (top-down rijenvolgorde) wordt genormaliseerd — Height geeft de positieve magnitude terug |
| DICOM | Header-parsing ondersteunt Implicit VR Little Endian en Explicit VR Little/Big Endian overdrachtssyntaxis, en haalt rijen, kolommen en toegewezen bits op |
// DICOM: rows -> Height, columns -> Width, bitsAllocated -> BitDepth,
// across any of the three common transfer syntaxes
var dicomInfo = ImageProbe.Probe(dicomBytes);
Console.WriteLine($"{dicomInfo.Width}x{dicomInfo.Height}, {dicomInfo.BitDepth}-bit");Ondersteunde Formaten
Alle 11 formaten worden op dezelfde manier gedetecteerd — ImageProbe identificeert het formaat en leest header-metadata; het decodeert of recodeert nooit pixeldata voor een van hen. Veldvulling varieert echter daadwerkelijk per formaat — elk formaat stelt Format in, maar slechts sommige bevatten bitsdiepte of frame-aantal in hun header:
| Formaat | Breedte / Hoogte | Bitdiepte | Aantal frames |
|---|---|---|---|
| PNG | ✓ | ✓ | ✓ |
| JPEG | ✓ | ✓ | — |
| GIF | ✓ | — | ✓ |
| BMP | ✓ | ✓ | — |
| WebP | ✓ | — | — |
| ICO | ✓ | ✓ | ✓ |
| TIFF | ✓ | ✓ | ✓ |
| PSD | ✓ | ✓ | — |
| EMF | ✓ (van grenzen) | — | — |
| WMF (plaatsbaar) | ✓ (veronderstelt 96 DPI) | — | — |
| DICOM | ✓ (Rijen/Kolommen) | ✓ (BitsAllocated) | — |
Een niet-herkende header wordt opgelost naar ImageFormat.Unknown in plaats van een fout te werpen. Een paar opvallende details over veldvulling: PNG’s FrameCount is altijd 1 (een constante, geen echte geanimeerde-PNG-frame-detectie); ICO’s FrameCount is een echte telling van de ingebedde pictogramgroottes in de map, en een 0 dimensie-byte in een ICO-mapvermelding betekent 256px volgens de formatspecificatie; TIFF’s FrameCount weerspiegelt een begrensde wandeling door de IFD-keten van het bestand (elke IFD is één pagina); niet-plaatsbare WMF wordt nog steeds correct geïdentificeerd als ImageFormat.Wmf maar retourneert alleen Format — dimensies worden alleen voor plaatsbare WMF gevuld, via een hard-gecodeerde 96DPI-conversie van de eenheden-per-inch-grenzen in de header; EMF heeft helemaal geen expliciet breedte/hoogte-veld, dus zijn dimensies worden afgeleid van de rclBounds device-space rechthoek.
Veerkrachtig door Ontwerp
ImageProbe gooit nooit een fout bij misvormde of afgekorte invoer. In plaats van een uitzondering te werpen, retourneert het een gedeeltelijke ImageInfo — Format wordt ingesteld zodra de format-marker van de header werd herkend, zelfs wanneer de rest van het bestand te kort is of corrupt is:
byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be nullDit maakt het veilig om uit te voeren tegen niet-vertrouwde, gedeeltelijke of lopende downloads zonder een try/catch rond elke aanroep.
Tips en best practices
- Gebruik
DetectFormatin plaats vanProbewanneer je alleen het formaat nodig hebt, niet de afmetingen - Controleer
Width/Height/BitDepth/FrameCountopnullvoordat je ze gebruikt — ze zijn niet voor elk formaat ingevuld - Geef de voorkeur aan
Probe(stream)boven het eerst inlezen van een heel bestand in een byte-array bij het werken met grote bestanden ImageProbeis volledig statisch — geen instantie, geenIDisposable, geen configuratie-object
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
Format is ImageFormat.Unknown | Header komt niet overeen met een van de 11 herkende formaten | Bevestig dat het bestand één van PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF, of DICOM is |
Width/Height zijn null | De header van het formaat bevat dat veld niet, of de header was afgekapt vóór dat veld | Controleer eerst Format; niet elk veld is ingevuld voor elk formaat |
| BMP-hoogte lijkt onverwacht positief | Bronbestand gebruikte een negatieve (top-down) hoogte in de header | Verwacht — ImageInfo.Height normaliseert altijd naar de positieve magnitude |
FAQ
Decodeert ImageProbe pixeldata?
Nee. Elke methode leest alleen de bestandsheader — dimensies, bitdiepte en aantal frames — nooit de pixelinhoud. Decoderen en renderen vallen buiten de scope van deze bibliotheek.
Wat gebeurt er als ik een beschadigd of afgekapt bestand probeer?
ImageProbe gooit nooit een uitzondering voor slecht gevormde of afgekorte invoer. Het retourneert een ImageInfo met alle velden die het kon bepalen uit de beschikbare headerbytes — Format wordt ingesteld zodra de formatmarker zelf herkend is.
Kan ik een stream onderzoeken die niet seekbaar is?
Ja. Probe(stream) accepteert zowel seekbare als niet-seekbare streams.
API Reference Samenvatting
| Klasse / Methode | Beschrijving |
|---|---|
ImageProbe.ProbeFile(path) | Onderzoek een bestand op pad, en retourneert een ImageInfo |
ImageProbe.Probe(stream) | Onderzoek een Stream (zoekbaar of niet) |
ImageProbe.Probe(data) | Onderzoek een ruwe byte[] |
ImageProbe.DetectFormat(stream) | Retourneer alleen de ImageFormat voor een stream |
ImageProbe.DetectFormat(data) | Retourneer alleen de ImageFormat voor een byte[] |
ImageInfo | Resulttype: Format, Width, Height, BitDepth, FrameCount |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |