Funktioner och funktionalitet
Funktioner och funktionaliteter
Denna sida täcker alla funktionsområden för Aspose.Imaging FOSS för .NET s formatdetektering och header-probning API, med fungerande C#-exempel. Biblioteket avkodar aldrig pixeldatat — varje metod läser endast filhuvudet.
Formatdetektering
ImageProbe är den statiska ingångspunkten. Tre överlagringar täcker en filsökväg, en ström och en rå 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 parseAnvänd DetectFormat när du bara behöver välja baserat på formatet; använd Probe/ProbeFile när du också behöver dimensioner, bitdjup eller bildramsantal.
Läsa headermetadata
ProbeFile/Probe returnerar ett ImageInfo med nullable Width, Height, BitDepth och FrameCount — var och en fylls i endast när det upptäckta formatets header faktiskt innehåller det värdet:
var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}Format (ett ImageFormat enum-värde) sätts alltid när huvudet har identifierats — det är det enda fältet som garanterat fylls i.
Per-formatanteckningar
Några format har huvudavvikelser som ImageInfo normaliserar eller exponerar direkt:
| Format | Behavior |
|---|---|
| GIF | FrameCount visar antalet bildrutor när filen innehåller flera bildrutor; utelämnas om antalet inte kan bestämmas |
| BMP | En negativ höjd i headern (radordning uppifrån och ner) normaliseras — Height returnerar den positiva magnituden |
| DICOM | Header parsing hanterar Implicit VR Little Endian och Explicit VR Little/Big Endian överföringssyntaxer, och extraherar rader, kolumner och allokerade bitar |
// 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");Stödda format
Alla 11 format identifieras på samma sätt — ImageProbe identifierar formatet och läser metadata från huvudet; det avkodar eller återkodar aldrig pixeldata för något av dem. Fältfyllning varierar faktiskt mellan formaten — varje format sätter Format, men bara vissa innehåller bitdjup eller bildräkning i sitt huvud:
| Format | Bredd / Höjd | Bitdjup | Antal bildrutor |
|---|---|---|---|
| PNG | ✓ | ✓ | ✓ |
| JPEG | ✓ | ✓ | — |
| GIF | ✓ | — | ✓ |
| BMP | ✓ | ✓ | — |
| WebP | ✓ | — | — |
| ICO | ✓ | ✓ | ✓ |
| TIFF | ✓ | ✓ | ✓ |
| PSD | ✓ | ✓ | — |
| EMF | ✓ (från gränser) | — | — |
| WMF (placerbar) | ✓ (antar 96 DPI) | — | — |
| DICOM | ✓ (Rader/Kolumner) | ✓ (BitsAllocated) | — |
Ett okänt huvud löser sig till ImageFormat.Unknown istället för att kasta ett fel. Några anmärkningsvärda detaljer om fältfyllning: PNG:s FrameCount är alltid 1 (en konstant, inte en verklig animerad-PNG-ramdetektering); ICO:s FrameCount är ett äkta antal av de inbäddade ikonstorlekarna i katalogen, och en 0 dimensionsbyte i en ICO-katalogpost betyder 256px enligt formatets specifikation; TIFF:s FrameCount speglar en begränsad genomgång av filens IFD-kedja (varje IFD är en sida); icke-placerbar WMF identifieras fortfarande korrekt som ImageFormat.Wmf men returnerar endast Format — dimensioner fylls i endast för placerbar WMF, via en hårdkodad 96DPI-konvertering från huvudets enheter-per-tum-gränser; EMF har inget explicit bredd-/höjdfält alls, så dess dimensioner härrör från rclBounds enhetsrymdsrektangel istället.
Motståndskraftig genom design
ImageProbe kastar aldrig ett fel vid felaktig eller trunkerad indata. Istället för att höja ett undantag returnerar den en partiell ImageInfo — Format sätts när huvudets formatmarkör har identifierats, även när resten av filen är avklippt eller korrupt:
byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be nullDetta gör det säkert att köra mot opålitliga, partiella eller pågående nedladdningar utan ett try/catch runt varje anrop.
Tips och bästa praxis
- Använd
DetectFormatistället förProbenär du bara behöver formatet, inte dimensionerna - Kontrollera
Width/Height/BitDepth/FrameCountförnullinnan du använder dem — de är inte ifyllda för varje format - Föredra
Probe(stream)framför att läsa in en hel fil i en bytearray först när du arbetar med stora filer ImageProbeär helt statisk — ingen instans, ingenIDisposable, inget konfigurationsobjekt
Vanliga problem
| Problem | Orsak | Åtgärd |
|---|---|---|
Format är ImageFormat.Unknown | Header matchar inte något av de 11 erkända formaten | Bekräfta att filen är en av PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF eller DICOM |
Width/Height är null | Formatets header innehåller inte det fältet, eller så blev headern trunkerad före det fältet | Kontrollera Format först; inte alla fält är ifyllda för varje format |
| BMP-höjden ser oväntat positiv ut | Källfilen använde en negativ (top-down) höjd i sin header | Förväntat — ImageInfo.Height normaliseras alltid till den positiva magnituden |
FAQ
Avkodar ImageProbe pixeldata?
Nej. Varje metod läser endast filhuvudet — dimensioner, bitdjup och bildramsantal — men aldrig pixelinnehållet. Avkodning och rendering ligger utanför detta biblioteks omfattning.
Vad händer om jag sonderar en korrupt eller trunkerad fil?
ImageProbe kastar aldrig ett undantag för felaktig eller trunkerad indata. Den returnerar ett ImageInfo med de fält den kunde bestämma från de tillgängliga header-byterna — Format sätts varje gång formatmarkören självigenkändes.
Kan jag sondera en ström som inte är sökbar?
Ja. Probe(stream) accepterar både sökbara och icke-sökbara strömmar.
API Reference Sammanfattning
| Klass / Metod | Beskrivning |
|---|---|
ImageProbe.ProbeFile(path) | Undersök en fil via sökväg och returnerar ett ImageInfo |
ImageProbe.Probe(stream) | Undersök ett Stream (sökbart eller inte) |
ImageProbe.Probe(data) | Undersök en rå byte[] |
ImageProbe.DetectFormat(stream) | Returnera endast ImageFormat för en ström |
ImageProbe.DetectFormat(data) | Returnera endast ImageFormat för en byte[] |
ImageInfo | Resultattyp: Format, Width, Height, BitDepth, FrameCount |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |