Bagikan melalui


Menerapkan IWICDevelopRaw

IWICDevelopRaw

Antarmuka IWICDevelopRaw memaparkan opsi pemrosesan khusus untuk pemrosesan gambar mentah. Semua codec mentah harus mendukung antarmuka IWICDevelopRaw . Beberapa codec mentah mungkin tidak dapat mendukung setiap pengaturan yang diekspos oleh antarmuka ini, tetapi Anda harus mendukung semua pengaturan yang mampu dilakukan codec Anda. Minimal, setiap codec mentah harus menerapkan metode SetRotation dan SetRenderMode .

Selain itu, beberapa metode dan antarmuka yang opsional untuk codec lain sangat disarankan untuk codec mentah. Ini termasuk metode GetPreview dan GetThumbnail pada kelas dekoder tingkat kontainer, dan antarmuka IWICBitmapSourceTransform pada kelas dekode tingkat bingkai.

Pengaturan yang diatur dengan menggunakan metode IWICDevelopRaw harus dipertahankan oleh codec dengan cara yang konsisten dengan cara metadata lain dipertahankan, tetapi Anda tidak boleh menimpa pengaturan "Sebagai Bidikan" asli. Dengan mempertahankan metadata dan menerapkan LoadParameterSet dan GetCurrentParameterSet, Anda mengaktifkan aplikasi pemrosesan mentah untuk mengambil dan menerapkan pengaturan pemrosesan di seluruh sesi.

Tujuan utama antarmuka IWICDevelopRaw adalah untuk memungkinkan pengembang aplikasi membangun antarmuka pengguna untuk menyesuaikan parameter mentah yang akan bekerja sekonsentrasi mungkin di berbagai codec. Asumsikan bahwa pengguna akhir akan menyesuaikan parameter dengan menggunakan kontrol slider, dengan nilai minimum dan maksimumnya dipetakan ke rentang minimum dan maksimum untuk parameter . Untuk mendukung hal ini, Anda harus berusaha keras untuk memperlakukan semua rentang parameter sebagai linier. Untuk memastikan bahwa kontrol slider tidak terlalu sensitif, Anda juga harus mendukung rentang seluas mungkin untuk setiap parameter, mencakup setidaknya 50 persen dari rentang maksimum yang mungkin. Misalnya, jika rentang kontras maksimum yang mungkin adalah dari abu-abu murni ke hitam dan putih murni, dengan nilai default yang dipetakan ke 0,0, rentang minimum yang didukung oleh codec adalah dari setidaknya setengah antara nilai default dan abu-abu murni pada ujung bawah (–1,0), hingga setidaknya setengah jalan antara nilai default dan hitam dan putih murni di ujung atas (+1,0).

interface IWICDevelopRaw : IWICBitmapFrameDecode
{
   HRESULT QueryRawCapabilitiesInfo ( WICRawCapabilitiesInfo *pInfo );
   HRESULT LoadParameterSet ( WICRawParameterSet ParameterSet );
   HRESULT GetCurrentParameterSet ( IPropertyBag2 **ppCurrentParameterSet );
   HRESULT SetExposureCompensation ( double ev );
   HRESULT GetExposureCompensation ( double *pEV );
   HRESULT SetWhitePointRGB ( UINT Red, UINT Green, UINT Blue );
   HRESULT GetWhitePointRGB ( UINT *pRed, UINT *pGreen, UINT *pBlue );
   HRESULT SetNamedWhitePoint ( WICNamedWhitePoint WhitePoint );
   HRESULT GetNamedWhitePoint ( WICNamedWhitePoint *pWhitePoint );
   HRESULT SetWhitePointKelvin ( UINT WhitePointKelvin );
   HRESULT GetWhitePointKelvin ( UINT *pWhitePointKelvin );
   HRESULT GetKelvinRangeInfo ( UINT *pMinKelvinTemp,
               UINT *pMaxKelvinTemp,
               UINT *pKelvinTempStepValue );
   HRESULT SetContrast ( double Contrast );
   HRESULT GetContrast ( double *pContrast );
   HRESULT SetGamma ( double Gamma );
   HRESULT GetGamma ( double *pGamma );
   HRESULT SetSharpness ( double Sharpness );
   HRESULT GetSharpness ( double *pSharpness );
   HRESULT SetSaturation ( double Saturation );
   HRESULT GetSaturation ( double *pSaturation );
   HRESULT SetTint ( double Tint );
   HRESULT GetTint ( double *pTint );
   HRESULT SetNoiseReduction ( double NoiseReduction );
   HRESULT GetNoiseReduction ( double *pNoiseReduction );
   HRESULT SetDestinationColorContext (const IWICColorContext *pColorContext );
   HRESULT SetToneCurve ( UINT cbToneCurveSize,
               const WICRawToneCurve *pToneCurve );
   HRESULT GetToneCurve ( UINT cbToneCurveBufferSize,
               WICRawToneCurve *pToneCurve,
               UINT *pcbActualToneCurveBufferSize );
   HRESULT SetRotation ( double Rotation );
   HRESULT GetRotation ( double *pRotation );
   HRESULT SetRenderMode ( WICRawRenderMode RenderMode );
   HRESULT GetRenderMode ( WICRawRenderMode *pRenderMode ); 
   HRESULT SetNotificationCallback ( IWICDevelopRawNotificationCallback 
               *pCallback );
}

QueryRawCapabilitiesInfo

QueryRawCapabilitiesInfo mengembalikan serangkaian kemampuan yang didukung untuk file mentah ini. Struktur WICRawCapabilitiesInfo didefinisikan sebagai berikut:

struct WICRawCapabilitiesInfo
{
   UINT cbSize;
   UINT CodecMajorVersion;
   UINT CodecMinorVersion;
   WICRawCapabilities ExposureCompensationSupport;
   WICRawCapabilities ContrastSupport;
   WICRawCapabilities RGBWhitePointSupport;
   WICRawCapabilities NamedWhitePointSupport;
   UINT NamedWhitePointSupportMask;
   WICRawCapabilities KelvinWhitePointSupport;
   WICRawCapabilities GammaSupport;
   WICRawCapabilities TintSupport;
   WICRawCapabilities SaturationSupport;
   WICRawCapabilities SharpnessSupport;
   WICRawCapabilities NoiseReductionSupport;
   WICRawCapabilities DestinationColorProfileSupport;
   WICRawCapabilities ToneCurveSupport;
   WICRawRotationCapabilities RotationSupport;              
}

Enumerasi WICRawCapabilities yang digunakan dalam struktur ini didefinisikan sebagai:

enum WICRawCapabilities 
{   
   WICRawCapabilityNotSupported,
   WICRawCapabilityGetSupported,
   WICRawCapabilityFullySupported
}

Bidang akhir adalah enumerasi WICRawRotationCapabilities , yang didefinisikan sebagai:

enum WICRawRotationCapabilities                    
{
   WICRawRotationCapabilityNotSupported,
   WICRawRotationCapabilityGetSupported,
   WICRawRotationCapabilityNinetyDegreesSupported
   WICRawRotationCapabilityFullySupported
}

LoadParameterSet

LoadParameterSet memungkinkan pengguna untuk menentukan apakah akan menggunakan pengaturan Sebagai Bidikan, menggunakan pengaturan yang disesuaikan pengguna, atau meminta dekoder untuk memperbaiki gambar secara otomatis.

enum WICRawParameterSet
{
   WICAsShotParameterSet,
   WICUserAdjustedParameterSet,
   WICAutoAdjustedParameterSet
}

GetCurrentParameterSet

GetCurrentParameterSet mengembalikan IPropertyBag2 dengan set parameter saat ini. Pemanggil kemudian dapat meneruskan parameter ini yang diatur ke encoder untuk digunakan sebagai opsi encoder.

Set/GetExposureCompensation

GetExposureCompensation dan SetExposureCompensation menunjukkan kompensasi pencahayaan untuk diterapkan ke output akhir. Rentang yang valid untuk EV adalah –5.0 hingga +5.0 berhenti.

Set/GetCurrentParameterRGB, Set/GetNamedWhitePoint, Set/GetwhitePointKelvin

Semua fungsi ini menyediakan cara untuk mendapatkan dan mengatur titik putih, baik sebagai nilai RGB, preset bernama nilai, atau sebagai nilai Kelvin. Kisaran yang dapat diterima untuk Kelvin adalah 1.500 – 30.000.

Set/GetContrast

GetContrast dan SetContrast menunjukkan jumlah kontras untuk diterapkan pada output. Rentang yang valid untuk menentukan kontras adalah –1.0 hingga +1.0, dengan kontras default adalah 0.0.

Set/GetGamma

GetGamma dan SetGamma menunjukkan Gamma yang akan diterapkan. Rentang yang valid untuk Gamma adalah 0,2 hingga 5.0, dengan 1.0 menjadi default. Gamma biasanya diimplementasikan menggunakan fungsi daya Gamma tradisional (fungsi daya linier dengan perolehan unity). Kecerahan ditingkatkan dengan peningkatan Gamma dan menurun saat Gamma mendekati nol. (Perhatikan bahwa nilai minimum bukan nol, karena nol akan mengakibatkan kesalahan bagi-demi-nol dalam perhitungan Gamma tradisional. Batas minimum logis adalah 1/maks, itulah sebabnya minimumnya adalah 0,2.)

Set/GetSharpness

GetSharpness dan SetSharpness menunjukkan jumlah penajaman yang akan diterapkan. Rentang yang valid adalah -1.0 hingga +1.0, dengan 0.0 menjadi jumlah default penajaman, dan -1.0 menunjukkan tidak ada penajaman sama sekali.

Set/GetSaturation

GetSaturation dan SetSaturation menunjukkan jumlah saturasi yang akan diterapkan. Rentang yang valid untuk menentukan saturasi adalah -1.0 hingga +1.0, dengan 0.0 menjadi saturasi normal, –1.0 mewakili desaturasi lengkap, dan +1.0 mewakili saturasi penuh.

Set/GetTint

GetTint dan SetTint menunjukkan warna yang akan diterapkan, pada bias hijau/magenta. Rentang yang valid adalah -1.0 hingga +1.0, dengan hijau berada di sisi negatif skala dan magenta pada positif. Skala warna didefinisikan sebagai ortogonal untuk suhu warna.

Set/GetNoiseReduction

GetNoiseReduction dan SetNoiseReduction menunjukkan jumlah pengurangan kebisingan yang akan diterapkan. Rentang yang valid untuk adalah -1.0 hingga +1.0, dengan 0.0 menunjukkan jumlah default pengurangan kebisingan, –1.0 menunjukkan tidak ada pengurangan kebisingan dan +1.0 yang menunjukkan pengurangan kebisingan maksimum.

SetDestinationColorContext

SetDestinationColorContext menentukan profil warna untuk diterapkan ke gambar. Anda dapat memanggil GetColorContexts untuk mengambil profil warna saat ini.

Set/GetToneCurve

GetToneCurve dan SetToneCurve menentukan kurva nada yang akan diterapkan. Asumsikan interpolasi linier antar titik. pToneCurve adalah struktur WICRawToneCurve, yang berisi array struktur WICRawToneCurvePoint, dan hitungan jumlah titik dalam array.

struct WICRawToneCurve 
{
   UINT cPoints;
   WICRawToneCurvePoint aPoints[];
}

WICRawToneCurvePoint berisi nilai input dan nilai output.

struct WICRawToneCurvePoint 
{
   double Input;
   double Output;
}

Ketika penelepon melewati NULL dalam parameter pToneCurve , Anda harus meneruskan kembali ukuran yang diperlukan untuk WICRawToneCurve dalam parameter pcbActualToneCurveBufferSize .

Set/GetRotation

GetRotation dan SetRotation menunjukkan tingkat rotasi yang akan diterapkan. Rotasi 90,0 akan menentukan rotasi 90 derajat searah jajar. (Perbedaan antara menggunakan SetRotation dan rotasi pengaturan menggunakan metode CopyPixels adalah bahwa sudut rotasi yang diatur menggunakan SetRotation harus dipertahankan oleh codec, sementara mengatur rotasi melalui CopyPixels hanya memutar gambar dalam memori.

Set/GetRenderMode

GetRenderMode dan SetRenderMode menunjukkan tingkat kualitas output yang diperlukan pemanggil. Ketika pengguna menyesuaikan parameter, aplikasi harus menampilkan perkiraan yang sangat cepat tentang seperti apa gambar aktual akan terlihat jika perubahan diterapkan. Untuk tujuan ini, gambar biasanya ditampilkan pada resolusi layar atau kurang, bukan resolusi gambar aktual, untuk memberikan umpan balik segera kepada pengguna. Ini adalah ketika aplikasi akan meminta kualitas Mode Draf, jadi ini harus sangat cepat. Ketika pengguna telah membuat semua perubahan, mempratinjaunya dalam mode draf, dan memutuskan untuk mendekode gambar lengkap dengan pengaturan saat ini, aplikasi meminta dekode Kualitas Terbaik. Ini biasanya juga diminta untuk pencetakan. Ketika tradeoff yang wajar antara kecepatan kualitas diperlukan, aplikasi meminta Kualitas Normal.

enum WICRawRenderMode
{
   WICRawRenderModeDraftMode,
   WICRawRenderModeNormalQuality ,
   WICRawRenderModeBestQuality
}

SetNotificationCallback

SetNotificationCallback mendaftarkan fungsi panggilan balik untuk dipanggil dekoder saat salah satu parameter pemrosesan Mentah berubah. Tanda tangan untuk IWICDevelopRawNotificationCallback hanya memiliki satu metode, yang disebut Beri Tahu. Beri tahu memiliki satu parameter, yang merupakan masker yang menunjukkan parameter pemrosesan mentah mana yang telah berubah.

HRESULT Notify ( UINT NotificationMask );

Operasi OR dilakukan pada nilai berikut untuk NotificationMask.

WICRawChangeNotification_ExposureCompensation
WICRawChangeNotification_NamedWhitePoint
WICRawChangeNotification_KelvinWhitePoint
WICRawChangeNotification_RGBWhitePoint
WICRawChangeNotification_Contrast
WICRawChangeNotification_Gamma
WICRawChangeNotification_Sharpness
WICRawChangeNotification_Saturation
WICRawChangeNotification_Tint
WICRawChangeNotification_NoiseReduction
WICRawChangeNotification_DestinationColorContext
WICRawChangeNotification_ToneCurve
WICRawChangeNotification_Rotation
WICRawChangeNotification_RenderMode

Referensi

IWICDevelopRaw

Konseptual

Menerapkan IWICBitmapSourceTransform

Menerapkan Encoder WIC-Enabled

Cara Menulis WIC-Enabled CODEC

Gambaran Umum Komponen Pencitraan Windows