Funktioner och funktionalitet

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 parse

Anvä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:

FormatBehavior
GIFFrameCount visar antalet bildrutor när filen innehåller flera bildrutor; utelämnas om antalet inte kan bestämmas
BMPEn negativ höjd i headern (radordning uppifrån och ner) normaliseras — Height returnerar den positiva magnituden
DICOMHeader 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:

FormatBredd / HöjdBitdjupAntal 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 null

Detta 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 DetectFormat istället för Probe när du bara behöver formatet, inte dimensionerna
  • Kontrollera Width/Height/BitDepth/FrameCount för null innan 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, ingen IDisposable, inget konfigurationsobjekt

Vanliga problem

ProblemOrsakÅtgärd
Format är ImageFormat.UnknownHeader matchar inte något av de 11 erkända formatenBekräfta att filen är en av PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF eller DICOM
Width/Height är nullFormatets header innehåller inte det fältet, eller så blev headern trunkerad före det fältetKontrollera Format först; inte alla fält är ifyllda för varje format
BMP-höjden ser oväntat positiv utKällfilen använde en negativ (top-down) höjd i sin headerFö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 / MetodBeskrivning
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[]
ImageInfoResultattyp: Format, Width, Height, BitDepth, FrameCount
ImageFormatEnum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

Se även

 Svenska