ID Artikel: 81498 - Kajian Terakhir: 14 September 2011 - Revisi: 2.0 DIBs dan menggunakan mereka
Pada Halaman iniRINGKASANBerikut ini adalah teks dari artikel "DIBs dan mereka menggunakan". Ini
Artikel ini tersedia dalam format file Bantuan Windows di perangkat lunak Microsoft
Perpustakaan selain untuk teks yang disajikan di bawah ini. INFORMASI LEBIH LANJUTBerkas berikut ini tersedia untuk di-download dari Microsoft
Pusat Download: Dibs2.exe (http://download.microsoft.com/download/platformsdk/article/3.1/W31/EN-US/Dibs2.exe) Untuk informasi lebih lanjut tentang cara men-download berkas Dukungan Microsoft, klik nomor artikel di bawah ini untuk melihat artikel pada Basis Pengetahuan Microsoft: 119591
(http://support.microsoft.com/kb/119591/EN-US/
)
Cara mendapatkan berkas Dukungan Microsoft dari Layanan Online Microsoft telah memindai berkas ini dari virus. Microsoft menggunakan perangkat lunak pendeteksi virus terbaru yang tersedia pada tanggal saat berkas dikirimkan. Berkas tersebut disimpan di server yang aman, yang membantu mencegah pengubahan yang tidak sah terhadap berkas.Artikel ini membahas konsep DIB (bitmap perangkat-independen) dari
Definisi dan struktur untuk API yang menggunakannya. Termasuk adalah kecil
contoh aplikasi yang menggambarkan beberapa metode yang paling umum dari
menggunakan DIBs untuk menampilkan dan memanipulasi gambar digital. Fungsi yang dibahas
adalah GetDIBits(), SetDIBits(), CreateDIBitmap(), SetDIBitsToDevice(), StretchDIBits(), dan CreateDIBPatternBrush(). Artikel ini tidak membahas
menggunakan palet dengan DIBs.SEKILAS PANDANGBitmap perangkat-independen (DIB) adalah format yang digunakan untuk menentukan perangkat- bitmaps independen dalam berbagai warna resolusi. Tujuan utama dari DIBs adalah untuk memungkinkan bitmaps dipindahkan dari satu perangkat lain (oleh karena itu, perangkat-independen bagian dari nama). DIB adalah format eksternal, di kontras dengan suatu bitmap tergantung perangkat, yang muncul dalam sistem sebagai bitmap objek (dibuat dengan menggunakan aplikasi CreateBitmap(),CreateCompatibleBitmap(), CreateBitmapIndirect(), atau CreateDIBitmap()). DIB biasanya diangkut dalam metafiles (biasanya menggunakan StretchDIBits() fungsi), BMP file, dan Clipboard (CF_DIB data format).DIB terdiri dari dua bagian: bit sendiri dan sebuah header yang menjelaskan format bit. Header berisi format warna, Tabel warna, dan ukuran bitmap. Mendukung format DIB saat ini empat warna resolusi: 1 bit, 4 bit, 8 bit, dan 24 bit. Di 1-bit, 4-bit, dan 8-bit DIBs, pixel ditetapkan oleh indeks (dari sedikit sesuai resolusi) ke dalam tabel warna; 24-bit piksel digambarkan sebagai 24-bit nilai-nilai, 1 byte masing-masing untuk merah, hijau, dan biru. Fungsi DIB adalah:
GetDIBits: Translates a device-dependent bitmap into the DIB
format
SetDIBits: Translates a DIB's information into device-
dependent form
CreateDIBitmap: Creates a device-dependent bitmap initialized with
DIB information
SetDIBitsToDevice: Sets a DIB directly to the output surface
StretchDIBits: Moves a rectangle from the DIB to a rectangle on
the destination surface, stretching or compressing
as necessary
CreateDIBPatternBrush: Creates a pattern brush using a DIB for the
bitmap description
PERANGKAT KEMERDEKAAN - APAKAH ITU BAIK UNTUK?Mentransfer bitmaps warna dari satu perangkat yang lain itu tidak mungkin di Versi Microsoft Windows lingkungan grafis lebih awal dari 3.0. Dengan DIBs, masing-masing perangkat menampilkan gambar sampai warna resolusi. Aplikasi dapat menyimpan gambar dalam DIB format dan kemudian menampilkan, terlepas dari perangkat output; kebutuhan aplikasi yang tidak lagi membuat versi dari setiap gambar untuk setiap jenis perangkat.Kemampuan mentransfer gambar ini dapat digunakan untuk mencetak gambar halftone. Untuk contoh, StretchDIBits() fungsi dapat melewati DIB langsung ke pengandar printer yang cerdas. Diberikan informasi penuh warna gambar Alih-alih hanya monokrom versi (metode tradisional), driver dapat menggunakan warna halftone untuk mencetak gambar realistis. Karena DIB format umum didefinisikan, aplikasi dapat memanipulasi ini dengan cepat. Pada kenyataannya, aplikasi dapat membangun gambar tanpa interaksi dengan Windows. Jika Windows tidak memiliki gambar primitif, aplikasi dapat mensimulasikan langsung ke DIB alih-alih menggunakan ada graphics device interface (GDI) primitif. Sayangnya, di bawah Windows versi 3.0 dan 3.1, GDI tidak dapat melakukan operasi output langsung untuk DIB. FORMAT FILE BMPEkstensi file dari file Windows DIB adalah BMP. File terdiri dariBITMAPFILEHEADER struktur diikuti oleh DIB itu sendiri. Sayangnya, karena BITMAPFILEHEADER struktur pernah benar-benar dilewatkan ke API, tidak setiap aplikasi yang menghasilkan file BMP mengisi struktur data dengan hati-hati. Untuk menambah kebingungan ini, definisi "tepat" struktur adalah bertentangan dengan dokumentasi. Benar, struktur data berisi bidang-bidang berikut:
bfType A WORD that defines the type of file. It must be
'BM'.
bfSize A DWORD that specifies the size of the file in
bytes. The Microsoft Windows Software Development
Kit (SDK) documentation claims otherwise. To be on
the safe side, many applications calculate their
own sizes for reading in a file.
bfReserved1,
bfReserved2 WORDs that must be set to 0.
bfOffBits A DWORD that specifies the offset from the
beginning of the BITMAPFILEHEADER structure to the
start of the actual bits. The DIB header
immediately follows the file header, but the
actual image bits need not be placed next to the
headers in the file.
Untuk contoh kode yang membaca BMP file, lihat contoh program. DIB HeaderHeader benar-benar terdiri dari dua bagian sebelah: header yang tepat dan Tabel warna. Keduanya digabungkan dalam BITMAPINFO struktur, yang adalah apa yang semua DIB api harapkan.Windows versi 3.0 mendukung dua jenis header: BITMAPINFOHEADER dan BITMAPCOREHEADER. Jika mungkin, aplikasi harus menggunakan hanya BITMAPINFOHEADERs. Definisi BITMAPCOREHEADER berdasarkan bitmap definisi dari presentasi Manager versi 1.1 dan didukung untuk kompatibilitas. Selama operasi pengaturan DIB, sebagian besar bidang yang sudah diisi oleh siapa pun dihasilkan DIB. Melakukan GetDIBits() panggilan, namun, memberikan kontrol yang lebih besar. Cara header diisi untuk operasi ini mendefinisikan DIB dihasilkan, terutama dengan resolusi warna. BITMAPINFOHEADER berisi bidang-bidang berikut:
biSize Should be set to sizeof(BITMAPINFOHEADER). This
field defines the size of the header (minus the
color table). If a new DIB definition is added, it
is identified by a new value for the size. This
field is also convenient for calculating a pointer
to the color table, which immediately follows the
BITMAPINFOHEADER.
biWidth, biHeight Define the width and the height of the bitmap in
pixels. They are DWORD values for future
expansion, and the code in Windows versions 3.0
and 3.1 ignores the high word (which should be set
to 0).
biPlanes Should always be 1. All DIB definitions rely on
biBitCount for color resolution definition.
biBitCount Defines the color resolution (in bits per pixel)
of the DIB. Only four values are valid for this
field: 1, 4, 8, and 24. New resolutions (16 bit,
for example) may be added in the future, but for
now only these four define a valid DIB. Choosing the
appropriate value when doing a GetDIBits is
discussed below. When performing a Set operation,
the value should already be defined for the bits.
biCompression Specifies the type of compression. Can be one of
three values: BI_RGB, BI_RLE4, or BI_RLE8. The most
common and useful choice, BI_RGB, defines a DIB in
which all is as it seems. Each block of biBitCount
bits defines an index (or RGB value for 24-bit
versions) into the color table. The other two
options specify that the DIB is stored (or will be
stored) using either the 4-bit or the 8-bit run
length encoding (RLE) scheme that Windows
supports. The RLE formats are especially useful
for animation applications and also usually
compress the bitmap. BI_RGB format is recommended
for almost all purposes. RLE versions, although
possibly smaller, are slower to decode, not as
widely supported, and extremely painful to band
properly.
biSizeImage Should contain the size of the bitmap proper in
bytes. I say "should" because the field is not
necessarily filled in. A call to GetDIBits to
generate a DIB fills in this field, but a DIB
created manually by an application might not have
this filled in. Calculating the size of a bitmap
is not hard:
biSizeImage = ((((biWidth * biBitCount) + 31)
& ~31) >> 3) * biHeight;
The crazy roundoffs and shifts account for the
bitmap being DWORD-aligned at the end of every
scanline. When nonzero, this field tells an
application how much storage space the DIB's bits
need. The biSizeImage field really becomes useful
when dealing with an RLE bitmap, the size of which
depends on how well the bitmap was encoded. If an
RLE bitmap is to be passed around, the biSizeImage
field is essential.
biXPelsPerMeter,
biYPelsPerMeter Define application-specified values for the
desirable dimensions of the bitmap. This
information can be used to maintain the physical
dimensions of an image across devices of different
resolutions. GDI never touches these fields. When
not filled in, they should both be set to 0.
biClrUsed Provides a way for getting smaller color tables.
When this field is set to 0, the number of colors
in the color table is based on the biBitCount
field (1 indicates 2 colors, 4 indicates 16, 8
indicates 256, and 24 indicates no color table). A
nonzero value specifies the exact number of colors
in the table. So, for example, if an 8-bit DIB
uses only 17 colors, then only those 17 colors
need to be defined in the table, and biClrUsed is
set to 17. Of course, no pixel can have an index
pointing past the end of the table.
Note: This field cannot be used during a GetDIBits
operation. GDI always fills a full-size color
table. The field is therefore more useful for
post-processing operations, when an application
trims down the contents of the DIB. If nonzero for
a 24-bit DIB, it indicates a table that the
application can use for color reference.
biClrImportant Specifies that the first x colors of the color
table are important to the DIB. If the rest of the
colors are not available, the image still retains
its meaning in an acceptable manner.
biClrImportant is purely for application use; GDI
does not touch this value. When this field is set
to 0, all the colors are important, or rather,
their relative importance has not been computed.
Ukuran tabel warna tergantung pada nilai biBitCount (dan dapat menjadi overwritten menggunakan biClrUsed bidang ini. Lihat di atas): Semua fungsi DIB termasuk parameter wUsage, yang dapat mempengaruhi definisi dari tabel warna. Artikel ini menghindari menggunakan palet dengan DIBs, dan dengan demikian menganggap bahwa wUsage selalu diatur ke DIB_RGB_COLORS dan bahwa tabel warna karena itu selalu terdiri dari nilai-nilai RGB. Kapan DIB_PAL_COLORS digunakan, tabel warna terdiri dari nilai-nilai kata yang Indeks ke palet logis yang saat ini dipilih. (Ini adalah topik dibahas secara rinci dalam artikel "Menggunakan DIBs dengan palet".) Bit formatHeader mendefinisikan format bit, tapi semua format berbagi aturan berikut:
MENGGUNAKAN DIB APIGetDIBits() dan SetDIBits()Dua fungsi ini digunakan untuk mengkonversi perangkat-independen bitmaps ke tergantung perangkat bitmaps dan sebaliknya. SetDIBits() mengkonversi DIB ke suatu bitmap tergantung perangkat, dan GetDIBits() menghasilkan DIB dari suatu bitmap tergantung perangkat.Pengandar perangkat yang direferensikan oleh hDC yang dilewatkan ke dalam panggilan kedua melakukan terjemahan sebenarnya. Beberapa pengandar perangkat mungkin tidak memiliki fungsi ini (misalnya, Windows versi 2.0 driver atau versi Windows primitif 3,0 sopir). Dalam kasus ini, GDI mensimulasikan terjemahan, tetapi hanya dalam monokrom--warna informasi menjadi hitam dan putih. Untuk sebagian besar, namun, hal ini tidak menjadi perhatian. Semua self-respecting layar driver mendukung fungsi ini, dan tidak hanya beberapa driver printer menyediakan terjemahan, biasanya monokrom driver yang GDI simulasi cukup. GetDeviceCaps (hDC, RASTERCAPS) mengembalikan nilai kata dengan bendera set menunjukkan DIB yang berfungsi mendukung pengandar. RC_DI_BITMAP menunjukkan dukungan GetDIBits() dan SetDIBits()RC_DIBTODEV menunjukkan dukungan SetDIBitsToDevice(), dan RC_STRETCHDIB menunjukkan dukungan StretchDIBits(). Fungsi yang tidak didukung dapat disimulasikan, meskipun simulasi sering tidak berguna sebagai hal yang nyata (terutama karena warna informasi hilang). Perangkat mungkin tidak dapat mendukung fungsionalitas penuh bahkan jika sedikit diatur. Sebagai contoh, perangkat dapat mendukung StretchDIBits tapi hanya untuk integral peregangan. Sayangnya, aplikasi tidak memiliki cara untuk menentukan kelengkapan pelaksanaan. Dalam kasus ini, GDI mensimulasikan fungsi. Parameter yang sama untuk kedua GetDIBits() dan SetDIBits():
GetDIBits(hDC, hBitmap, nStartScan, nNumScans, lpBits, lpBitmapInfo,
wUsage)
SetDIBits(hDC, hBitmap, nStartScan, nNumScans, lpBits, lpBitmapInfo,
wUsage)
hDC The device context (DC) responsible for the translation
operation. hDC must be compatible with the hBitmap
parameter.
hBitmap The device-dependent bitmap from which (Get) or to
which (Set) the DIB will be translated. Because of how
the simulation code operates, this bitmap should not be
currently selected into any DC.
nStartScan,
nNumScans Define the contents of lpBits. For example, a StartScan
of 5 indicates that lpBits points to the fifth scan of
the DIB. A NumScans of 14 indicates that lpBits points
to 14 scans of the DIB. Normally, nStartScan is set to
0 and nNumScans is set to biHeight to denote that the
whole DIB is pointed to by lpBits.
lpBits The actual bitmap of the DIB. The pixel information is
pointed to by this parameter.
lpBitmapInfo The header (with color table) defining the DIB. The
height and width in this header must match the height
and width of the hBitmap parameter (the translation is
always 1-to-1). The color resolution of the DIB need
not match that of hBitmap.
wUsage For the purposes of this article, assume this to be
DIB_RGB_COLORS, indicating RGB colors in the color
table.
Catatan Untuk banyak printer yang bisa melakukan warna halftone, metode ini adalah tidak pilihan; StretchDIBits (dibahas berikut) jauh lebih berguna. Berikut adalah tampilan sederhana DIB ke DC (dengan tidak ada kesalahan penanganan):
HBITMAP hBitmap;
HDC hMemDC;
hBitmap = CreateCompatibleBitmap(hDC, (WORD)lpInfo->biWidth,
lpInfo->(WORD)biHeight);
hMemDC = CreateCompatibleDC(hDC);
SetDIBits(hDC, hBitmap, 0, (WORD)lpInfo->biHeight, lpBits,
lpBitmapInfo, DIB_RGB_COLORS);
hBitmap = SelectObject(hMemDC, hBitmap);
BitBlt(hDC, 0, 0, (WORD)lpInfo->biWidth, (WORD)lpInfo->biHeight,
hMemDC, 0, 0, SRCCOPY);
DeleteObject(SelectObject(hMemDC, hBitmap));
DeleteDC(hMemDC);
Untuk GetDIBits() untuk bekerja dengan baik, aplikasi ini perlu untuk menetapkan bidang berikut di header: biSize = sizeof(BITMAPINFOHEADER) biWidth = (width of the bitmap) biHeight = (height of the bitmap) biPlanes = 1 biBitCount = [desired color resolution (1, 4, 8, or 24)] biCompression = BI_RGB (For RLE information, see below.)
if (biBitCount != 24)
nSizeTable = (1 << biBitCount) * sizeof(RGBQUAD)
else
nSizeTable = 0;
Aplikasi tujuan untuk DIB menentukan apa resolusi warna untuk memilih. Pendekatan yang biasa adalah untuk menghasilkan DIB yang melindungi warna informasi dari sumber tergantung perangkat bitmap. Memilih resolusi yang lebih rendah mengakibatkan hilangnya informasi warna, yang biasanya tidak diinginkan. Selalu menggunakan 24-bit resolusi tidak perlu, Namun, karena melakukannya menambahkan warna resolusi tidak lebih jika sumber memiliki resolusi 8-bit atau kurang. Parameter nStartScan dan nNumScans (residu presentasi Manajer kompatibilitas) dirancang untuk digunakan untuk banding. Jika tidak cukup memori tersedia untuk memuat seluruh DIB ke memori di salah satu sepotong, lpBits dapat dibuat untuk menunjuk ke hanya sebagian bit. Perhatikan contoh berikut: CreateDIBitmap()Kode berikut menunjukkan panggilan CreateDIBitmap() dengan biasa kasus:SetDIBitsToDevice()SetDIBitsToDevice() memungkinkan aplikasi untuk mengatur DIB langsung ke permukaan perangkat. Karena fungsi ini merupakan ketidaksepakatan dari awal pengembangan, antarmuka bukanlah sebagai dipoles seperti itu bisa. StretchDIBits() fungsi jauh lebih kuat daripada SetDIBitsToDevice(). StretchDIBits() tidak semua ituSetDIBitsToDevice() Apakah dan memiliki antarmuka yang lebih baik. SetDIBitsToDevice() terbatas dalam cara menangani metafiles karena tidak skala, dan banding dengan parameter nStartScan dan nNumScans nontrivial di terbaik. StretchDIBits() tidak membiarkan banding.Kode berikut melakukan SetDIBitsToDevice() fungsi pada bitmap penuh (tidak ada banding) menggunakan StretchDIBits: Berurusan dengan upside-down DIB rumit ketika melakukan parsial pengaturan. Sebagai contoh, jika aplikasi ingin mendapatkan bagian ketiga dari DIB w oleh h piksel untuk perangkat di (x, y), panggilan akan seperti berikut: StretchDIBits()Fungsi ini adalah semua dilakukan sayang untuk menampilkan DIB pada permukaan perangkat. Hal ini sangat baik untuk metafiling dan Percetakan, kemampuan untuk meregangkan yang penting.Satu lubang kritis dalam pelaksanaan saat ini StretchDIBits() adalah bahwa StretchDIBits() didukung oleh driver printer dan tidak banyak Tampilkan pengandar. Oleh karena itu, menggunakan fungsi ini berulang kali untuk meregangkan DIB ke layar secara signifikan lebih lambat daripada menggunakan SetDIBits (untuk mendapatkan suatu bitmap tergantung perangkat) diikuti oleh diulang StretchBlt() panggilan. Pelaksanaan fungsi ini dalam GDI ini sangat sederhana. Jika pengandar perangkat dapat menangani panggilan itu sendiri, itu tidak. Jika tidak, dan panggilan adalah 1-1 dan perangkat mendukung SetDIBitsToDevice(), panggilan masuk SetDIBitsToDevice() memanggil sopir. (Ini hanya bekerja dengan SRCCOPY sebagai ROP.) Jika tak satu pun dari metode ini mungkin, CreateDIBitmap() digunakan untuk membuat versi tergantung perangkat bitmap, dan StretchBlt dipanggil untuk melakukan pekerjaan yang sebenarnya. Parameter untuk StretchDIBits() pada dasarnya adalah sama untukStretchBlt() (dengan sumber hDC digantikan oleh lpBits dan lpInfo). Fungsi ini tidak memiliki nStartScan dan parameter nNumScans DIB fungsi lain, jadi lpBits selalu poin untuk scan pertama DIB. Ketika menggunakan fungsi ini untuk apa-apa selain penuh bitmap peregangan, ingat bahwa semua sumber koordinat (yang berkaitan dengan DIB) dalam sistem terbalik. Fungsi akan tepat flip gambar, tapi persegi panjang sumber didefinisikan dengan Y = 0 di bawah dan extent naik. Untungnya, koordinat-x menggunakan konvensi sama seperti Windows. Driver printer yang mendukung fungsi ini (misalnya, PSCRIPT dan HPPCL) biasanya menggunakan algoritma halftone output baik warna gambar. Oleh karena itu, mempertahankan DIBs pada tertinggi bermakna warna resolusi mungkin (biasanya 8 bit) diinginkan bahkan jika perangkat output adalah monokrom, karena informasi warna masih berguna untuk baik output. Sayangnya, sebagian besar driver printer tidak mendukung ROP apapun selain SRCCOPY. CreateDIBPatternBrush()Fungsi ini memungkinkan aplikasi untuk menciptakan pola kuas oleh menentukan DIB bukannya suatu bitmap tergantung perangkat, sebagai digunakan dalamCreatePatternBrush() fungsi. Kuas dibuat menggunakan fungsi ini digunakan mirip dengan sikat lain. DIB adalah berubah menjadi bitmap perangkat-tergantung pada SelectObject() waktu untuk digunakan dengan perangkat. Sikat ini menyerupai pola standar kuas untuk perangkat.DIBS PADA CLIPBOARDDua dasar mekanisme untuk menempatkan DIBs di Clipboard menggunakan CF_DIB data format atau menempatkan DIB ke metafile dan menggunakan CF_METAFILEPICT data format.CF_DIB format menggunakan DIB dikemas, yang mengikuti bit segera setelah header dan tabel warna. Ketika membaca atau menciptakan DIB dikemas, aplikasi harus benar menghitung ukuran Tabel warna untuk memastikan bahwa bit berada di tempat yang tepat. Karena mengharapkan semua fungsi RLE DIB sebagai petunjuk dua, satu untuk header dan satu untuk bit, penunjuk bit harus dihitung sebelum menggunakan. (Untuk perhitungan ukuran tabel warna, lihat kode sampel di warna meja penjelasan di atas.) Cara termudah untuk menempatkan DIB ke metafile adalah dengan menggunakanStretchDIBits(): DIB FORMATKetika biCompression lapangan di header DIB diatur ke BI_RLE4 baik (untuk biBitCount = 4) atau BI_RLE8 (untuk biBitCount = 8), gambar telah jangka panjang dikodekan. Penjelasan dari skema pengkodean dapat ditemukan di "Microsoft Windows Software Development Kit referensi Volume 2," di "BITMAPINFOHEADER" bagian "tipe Data dan struktur" Bab. The skema dasar melibatkan mengompresi beberapa, horizontal berdekatan, identik piksel ke menjalankan encoding. Sebagai contoh, 10 piksel warna indeks 17 dikodekan sebagai jangka panjang 10 dan indeks 17. Kode untuk akhir scan dan untuk delta bergerak juga disediakan, di mana x dan y offset adalah disediakan untuk pixel berikutnya.Jenis penyandian biasanya memampatkan bitmap dan juga berguna untuk membuat animasi sprite-jenis, yang hanya sebagian kecil dari gambar perubahan di setiap bingkai. Kemampuan animasi dicapai dengan menggunakan Delta kode untuk membatasi jumlah piksel sebenarnya sedang diatur. Piksel dilewati oleh delta bergerak kiri tersentuh. Keterbatasan utama DIB DIBs adalah bahwa aplikasi dapat tidak mudah menentukan ukuran bitmap dalam bytes juga menunjuk ke scanline tertentu tanpa decoding bitmap dari scan pertama. Medan biSizeImage berguna dalam pemecahan masalah pertama. Decoding, encoding, dan umumnya memanipulasi format DIB lebih lambat dan lebih rumit daripada noncompressed (BI_RGB) format. Beberapa aplikasi - misalnya, kuas --menolak untuk membaca DIB DIBs. Meskipun semua api menerima mereka, DIB DIBs akan mungkin tidak menjadi format yang didukung secara universal. Juga, karena dari relatif jarang format ini, beberapa driver mungkin tidak sepenuhnya diuji dukungan untuk proses encoding dan decoding. Untuk menghasilkan RLE DIB, GetDIBits() disebut dengan biCompression set ke jenis yang diinginkan encoding. Jumlah memori yang dibutuhkan untuk menyimpan potongan-potongan tidak dihitung dengan mudah. Jika GetDIBits() disebut dengan lpBits diatur ke NULL, jumlah memori yang dibutuhkan untuk bit kembali di biSizeImage. Panggilan berikutnya dengan lpBits menunjuk ke blok benar ukuran memori kembali bitmap dikodekan. Menerjemahkan RLE DIB ke bentuk tergantung perangkat memerlukan no Pengolahan khusus. Salah satu fungsi Set dapat digunakan biasanya dengan header yang berisi nilai biSizeImage dan biCompression yang tepat untuk cocok bit. KEKURANGAN DIBSMungkin pembatasan terbesar DIBs adalah bahwa mereka lebih lambat daripada bitmaps tergantung perangkat. Menerjemahkan DIBs ke bentuk tergantung perangkat sebelum mereka dapat benar-benar ditampilkan memerlukan kemampuan pemrosesan yang mengakibatkan tambahan. Dalam dunia ideal, StretchDIBits() 1-1 akan secepat BitBlt(). Kecepatan ini akan memungkinkan aplikasi untuk beroperasi secara efektif dalam bidang bitmap logis, yang penuh warna dan akses penuh ke setiap pixel, terlepas dari perangkat fisik keterbatasan.DIBs didasarkan pada sistem koordinat yang terbalik relatif terhadap Windows, membuat kode sedikit frustrasi dan tidak intuitif. Selalu Mengingat quirkiness ini harus membantu membatasi jumlah iterasi diperlukan untuk mendapatkan bitmaps benar berbaris. Anda bisa mendapatkan warna penuh menggunakan 24-bit DIBs, tetapi mereka sangat lambat untuk memecahkan sandi, membaca, dan menulis. Hal ini terutama berlaku pada palet 8-bit perangkat, di mana terjemahan harfiah dapat mengambil menit. Juga, ukuran 24-bit DIBs membuat mereka sedikit berat untuk penggunaan umum. MASALAH YANG BERKAITAN DENGAN DIB DI WINDOWS VERSI 3.0Rekaman metafile StretchDIBits() panggilan yang menggunakan BITMAPCOREHEADER menyebabkan UEA. Mengkonversi semua header untuk gaya BITMAPINFO untuk menghindari masalah ini. Pemecahan masalah ini dianjurkan untuk umum DIB pengolahan.The SetDIBits() simulasi kode untuk lebih besar daripada 64 K monokrom DIBs menyebabkan crash atau cetakan salah ketika menggunakan SetDIBits(), aSetDIBitsToDevice(), atau StretchDIBits() untuk pengandar yang tidak mendukung SetDIBits(). Hak cipta 1992 oleh Microsoft Corporation. Semua hak dilindungi undang-undang.
Penerjemahan MesinPENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah. Klik disini untuk melihat versi Inggris dari artikel ini:81498
(http://support.microsoft.com/kb/81498/en-us/
)
| Sumber Lain Situs Pendukung Lain
KomunitasTerjemahan Artikel
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email



Kembali ke atas