Inti API

API Inti

Aspose.Imaging FOSS untuk seluruh permukaan publik .NET terdiri dari tiga kelas: ImageProbe (fasad statis), ImageInfo (nilai hasil), dan ImageFormat (enum format). Halaman ini membahas bagaimana mereka berhubungan sebagai kontrak, di luar tur per-fitur di Fitur dan Fungsionalitas.


Kontrak tiga kelas

  • ImageProbe — statis, tanpa status. Setiap panggilan bersifat independen; tidak ada yang perlu dikonfigurasi atau dibuang.
  • ImageInfo — tertutup, tidak dapat diubah. Semua lima properti (Format, Width, Height, BitDepth, FrameCount) hanya dapat dibaca setelah dibuat.
  • ImageFormat — sebuah enum dengan satu nilai per format yang dikenali, plus Unknown.
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 it

Membuat ImageInfo secara langsung

Konstruktor ImageInfo bersifat publik — hanya format yang diperlukan, setiap parameter lain default ke null. Ini berguna untuk unit test yang memerlukan hasil pengganti tanpa menyelidiki file nyata:

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);

Tidak ada cara yang sesuai untuk mutate an ImageInfo setelah konstruksi — setiap properti hanya dapat dibaca, sehingga sebuah instance yang dipindai atau dibangun aman untuk disebarkan dan di-cache tanpa penyalinan defensif.


Memilih overload yang tepat

OverloadGunakan ketika
ImageProbe.ProbeFile(path)Anda memiliki jalur file dan menginginkan ImageInfo lengkap
ImageProbe.Probe(stream)Anda sudah memiliki Stream yang terbuka (dapat seek atau tidak) dan menginginkan ImageInfo lengkap
ImageProbe.Probe(data)Anda sudah memiliki byte di memori dan menginginkan ImageInfo secara penuh
ImageProbe.DetectFormat(stream) / (data)Anda hanya perlu melakukan percabangan pada ImageFormat — lewati parsing header di luar tanda tangan format

ProbeFile membuka dan membaca file itu sendiri — tidak perlu membuka FileStream terlebih dahulu hanya untuk memanggil Probe(stream).


Batch-probing sebuah direktori

Karena ImageProbe tidak pernah melempar pengecualian, pemindaian direktori dapat memanggilnya dalam loop ketat tanpa try/catch per-berkas:

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}");
}

Setiap berkas yang header-nya tidak cocok dengan salah satu dari 11 format yang dikenali akan diubah menjadi ImageFormat.Unknown alih-alih melempar — loop di atas tidak pernah memerlukan catch block.


Kontrak never-throws

Ini bukan perilaku kebetulan — ini adalah bagian yang disengaja dari kontrak API. Jika header format yang dikenali terpotong atau rusak di tengah proses parsing, ImageProbe tetap mengembalikan sebuah ImageInfo dengan Format yang diset ke format yang dikenalnya; ia tidak meneruskan pengecualian parsing ke pemanggil. Hanya Format yang dijamin — perlakukan semua properti lain sebagai opsional terlepas dari format yang terdeteksi.


Masalah Umum

MasalahPenyebabPerbaikan
Constructed ImageInfo tidak cocok dengan hasil probe yang nyataInstansi yang dibangun secara manual tidak memvalidasi konsistensi antar bidangGunakan konstruksi manual hanya untuk test doubles, bukan sebagai pengganti probing file nyata
Memanggil Probe ketika DetectFormat sudah cukupParsing header yang tidak diperlukan ketika hanya format yang dibutuhkanGunakan DetectFormat jika Anda tidak pernah membaca Width/Height/BitDepth/FrameCount
Unknown format untuk file yang Anda harapkan didukungHeader tidak cocok dengan salah satu dari 11 tanda tangan yang dikenali, atau file tersebut sepenuhnya memiliki format yang berbedaKonfirmasi file terhadap daftar format yang didukung

FAQ

Bisakah saya membuat subclass ImageInfo atau ImageProbe?

Tidak. ImageInfo adalah sealed dan ImageProbe adalah static — tidak ada yang dirancang untuk subclassing atau instantiation via inheritance.

Apakah ImageProbe thread-safe?

ImageProbe tidak menyimpan state yang dapat diubah antara panggilan — setiap panggilan ke Probe, ProbeFile, atau DetectFormat bersifat independen, menjadikan panggilan bersamaan dari beberapa thread aman.

Apakah saya perlu melakukan dispose apa pun?

Tidak. ImageProbe tidak memiliki sumber daya IDisposable miliknya sendiri. Jika Anda melewatkan Stream yang Anda buka sendiri, Anda tetap bertanggung jawab untuk mendispose aliran tersebut — Probe(stream) tidak menutupnya.


API Reference Ringkasan

Kelas / MetodeDeskripsi
ImageProbe.ProbeFile(path)Uji file berdasarkan path
ImageProbe.Probe(stream)Uji Stream
ImageProbe.Probe(data)Uji byte[]
ImageProbe.DetectFormat(stream)Hanya format, dari Stream
ImageProbe.DetectFormat(data)Hanya format, dari byte[]
ImageInfo(format, width, height, bitDepth, frameCount)Konstruktor publik — hanya format yang diperlukan
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCountProperti hasil hanya baca
ImageFormatEnum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

Lihat Juga

 Bahasa Indonesia