Bagikan melalui


Antarmuka IWICPalette (wincodec.h)

Mengekspos metode untuk mengakses dan membangun tabel warna, terutama untuk format piksel terindeks.

Warisan

Antarmuka IWICPalette mewarisi dari antarmuka IUnknown . IWICPalette juga memiliki jenis anggota ini:

Metode

Antarmuka IWICPalette memiliki metode ini.

 
IWICPalette::GetColorCount

Mengambil jumlah warna dalam tabel warna.
IWICPalette::GetColors

Mengisi array warna yang disediakan dengan warna dari tabel warna internal. Array warna harus berukuran sesuai dengan hasil yang dikembalikan dari GetColorCount.
IWICPalette::GetType

Mengambil WICBitmapPaletteType yang menjelaskan palet.
IWICPalette::HasAlpha

Menunjukkan apakah palet berisi entri yang tidak buram (yaitu, entri dengan alfa yang kurang dari 1).
IWICPalette::InitializeCustom

Menginisialisasi palet ke entri warna kustom yang disediakan.
IWICPalette::InitializeFromBitmap

Menginisialisasi palet menggunakan nilai komputasi yang dioptimalkan berdasarkan bitmap referensi.
IWICPalette::InitializeFromPalette

Menginisialisasi palet berdasarkan palet tertentu.
IWICPalette::InitializePredefined

Menginisialisasi palet ke salah satu palet yang telah ditentukan sebelumnya yang ditentukan oleh WICBitmapPaletteType dan secara opsional menambahkan warna transparan.
IWICPalette::IsBlackWhite

Mengambil nilai yang menjelaskan apakah palet berwarna hitam dan putih.
IWICPalette::IsGrayscale

Mengambil nilai yang menjelaskan apakah palet berukuran abu-abu.

Keterangan

Jika WICBitmapPaletteType bukan WICBitmapPaletteCustom, warna secara otomatis dihasilkan berdasarkan tabel di atas. Jika pengguna kemudian mengubah entri palet warna, WICBitmapPalette diatur ke Kustom oleh tindakan tersebut.

Parameter initializeFromBitmapfAddTransparentColor akan menambahkan warna transparan ke akhir koleksi warna jika ukurannya jika kurang dari 256, jika tidak indeks 255 akan diganti dengan warna transparan. Jika jenis palet yang telah ditentukan sebelumnya digunakan, jenis palet akan berubah menjadi BitmapPaletteTypeCustom karena tidak lagi cocok dengan palet yang telah ditentukan sebelumnya.

Antarmuka palet adalah antarmuka pencitraan tambahan karena tidak secara langsung menyangkut bitmap dan piksel; melainkan menyediakan terjemahan warna terindeks untuk bitmap terindeks. Untuk format piksel terindeks dengan M bit per piksel: (Jumlah warna dalam palet) lebih besar dari 2^M.

Secara tradisional operasi dasar palet adalah memberikan terjemahan dari indeks byte (atau lebih kecil) ke dalam nilai warna 32bpp. Ini sering dicapai dengan 256 tabel entri nilai warna.

Contoh

    IWICImagingFactory *pFactory = NULL;
    IWICBitmapDecoder *pDecoder = NULL;
    IWICBitmapFrameDecode *pBitmapFrameDecode = NULL;
    IWICPalette *pPalette = NULL;

    UINT uiFrameCount = 0;

    HRESULT hr = CoCreateInstance(
        CLSID_WICImagingFactory,
        NULL,
        CLSCTX_INPROC_SERVER,
        IID_IWICImagingFactory,
        (LPVOID*)&pFactory
        );

    if (SUCCEEDED(hr))
    {
        hr = pFactory->CreateDecoderFromFilename(
                           L"test.gif",
                           NULL,
                           GENERIC_READ,
                           &pDecoder);
    }

    if (SUCCEEDED(hr))
    {
        hr = pDecoder->GetFrameCount(&uiFrameCount);
    }

    if (SUCCEEDED(hr) && (uiFrameCount > 0))
    {
        hr = pDecoder->GetFrame(0, &pBitmapFrameDecode);

        if (SUCCEEDED(hr))
        {
            hr = pFactory->CreatePalette(&pPalette);
        }

        if (SUCCEEDED(hr))
        {
            hr = pBitmapFrameDecode->CopyPalette(pPalette);
        }

        if (SUCCEEDED(hr))
        {
            UINT uiColorCount = 0;
            UINT uiActualColorCount = 0;
            WICColor *pColors = NULL;

            hr = pPalette->GetColorCount(&uiColorCount);

            if (SUCCEEDED(hr) && (uiColorCount > 0))
            {
                pColors = new WICColor[uiColorCount];

                if (pColors)
                {
                    hr = pPalette->GetColors(uiColorCount, pColors, &uiActualColorCount);

                    // Do something with the colors here...

                    delete[] pColors;
                }
                else
                {
                    hr = E_OUTOFMEMORY;
                }
            }
        }
    }

    if (pPalette)
    {
        pPalette->Release();
    }

    if (pBitmapFrameDecode)
    {
        pBitmapFrameDecode->Release();
    }

    if (pDecoder)
    {
        pDecoder->Release();
    }

    if (pFactory)
    {
        pFactory->Release();
    }

    return hr;

Dalam contoh kode ini, WICColor didefinisikan sebagai nilai UINT32 dengan tata letak ini:

0xAARRGGBB

Header wincodec.h type-mendefinisikan WICColor sebagai UINT32.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP dengan SP2, Windows Vista [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2008 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header wincodec.h