Kenmerken en functionaliteiten

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 parse

Gebruik 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:

FormaatBehavior
GIFFrameCount geeft het aantal frames weer wanneer het bestand meerdere frames bevat; weggelaten als het aantal niet kan worden bepaald
BMPEen negatieve hoogte in de header (top-down rijenvolgorde) wordt genormaliseerd — Height geeft de positieve magnitude terug
DICOMHeader-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:

FormaatBreedte / HoogteBitdiepteAantal 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 null

Dit 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 DetectFormat in plaats van Probe wanneer je alleen het formaat nodig hebt, niet de afmetingen
  • Controleer Width/Height/BitDepth/FrameCount op null voordat 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
  • ImageProbe is volledig statisch — geen instantie, geen IDisposable, geen configuratie-object

Veelvoorkomende problemen

ProbleemOorzaakOplossing
Format is ImageFormat.UnknownHeader komt niet overeen met een van de 11 herkende formatenBevestig dat het bestand één van PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF, of DICOM is
Width/Height zijn nullDe header van het formaat bevat dat veld niet, of de header was afgekapt vóór dat veldControleer eerst Format; niet elk veld is ingevuld voor elk formaat
BMP-hoogte lijkt onverwacht positiefBronbestand gebruikte een negatieve (top-down) hoogte in de headerVerwacht — 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 / MethodeBeschrijving
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[]
ImageInfoResulttype: Format, Width, Height, BitDepth, FrameCount
ImageFormatEnum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

Zie ook

 Nederlands