Artikel ini membahas tentang seperti apa format grafik bmp. Meskipun ini adalah salah satu format yang lebih sederhana, karena banyaknya variasi format ini, tidak semua poin terlihat jelas. Jadi, berhentilah menuangkan air, mari kita mulai.
Struktur format
Format bmp (dari kata BitMaP - bit map, atau, dalam bahasa Rusia, bit array) adalah gambar tidak terkompresi (kebanyakan) yang cukup mudah dibaca dan ditampilkan di OS Windows, yang memiliki fungsi API khusus yang membantu.
Pertama, mari kita berikan representasi grafis dari data dalam bmp (gambar diambil dari MSDN).
Pada awalnya ada file header (BITMAPFILEHEADER). Hal ini dijelaskan sebagai berikut:
tipe bf menentukan jenis file. Di sini dia seharusnya menjadi BM. Jika Anda membuka file BMP apa pun dalam editor teks (atau lebih baik lagi, dalam editor heksadesimal), Anda akan melihat bahwa dua karakter pertama adalah BM (dari kata BitMap, seperti yang mungkin sudah Anda duga).
ukuran bf adalah ukuran file itu sendiri dalam byte. Sebenarnya, Anda harus menghitungnya (yang disarankan), tetapi saya salah mengatur ukuran file (meskipun tidak sengaja :)) dan tidak ada masalah (ACDSee membaca tanpa masalah, program saya berfungsi), tetapi saya tidak menyarankan Anda salah menulisnya , tiba-tiba akan muncul program teliti yang akan membandingkan ukuran ini dengan yang asli dan memutuskan bahwa itu bukan bmp, tetapi sesuatu yang lain. Idealnya, semua program, untuk memastikan bahwa itu adalah bmp asli dan bukan palsu, pertama-tama harus memeriksa apakah bfType berisi "BM" (tanpa tanda kutip), dan kedua, apakah bfSize sama dengan ukuran file.
bfReserved1 dan bfReserved2 dicadangkan dan harus nol.
bfOffBits. Ini adalah salah satu bidang terpenting dalam struktur ini. Ini menunjukkan di mana bitmap itu sendiri dimulai relatif terhadap awal file (atau, seperti yang tertulis di MSDN, "dari awal struktur BITMAPFILEHEADER"), yang menjelaskan gambar tersebut. Artinya, untuk menjamin sampai ke awal array, Anda harus menulis:
tag struct typedefBITMAPINFOHEADER
{
Ukuran DWORD;
Lebar dua PANJANG;
dua tinggi;
Biplan KATA;
KATA biBitCount;
Kompresi DWORD;
DWORD biSizeImage;
biXPelsPerMeter PANJANG;
biYPelsPerMeter PANJANG;
DWORD biClrDigunakan;
DWORD biClrPenting;
) BITMAPINFOHEADER, * PBITMAPINFOHEADER;
ukuran besar adalah ukuran struktur itu sendiri. Ini perlu diinisialisasi sebagai berikut: bih.biSize = sizeof(BITMAPINFOHEADER);
Di sini sekali lagi kita asumsikan bahwa bih dideklarasikan sebagai berikut: BITMAPINFOHEADER bih;
duaLebar dan duaTinggi atur lebar dan tinggi gambar masing-masing dalam piksel.
biplan menentukan jumlah pesawat. Untuk saat ini selalu disetel ke 1.
biBitCount- Jumlah bit per piksel. Kami akan membicarakan ini lebih lanjut di bawah.
bikompresi menunjukkan jenis kompresi. Jangan kaget atau takut jika bmp tiba-tiba mengalami kompresi. Saya pribadi belum melihat lebih dari satu bmp terkompresi (tetapi saya tidak mengatakan bahwa bmp tersebut tidak ada). Jika tidak ada kompresi, maka flag ini harus disetel ke BI_RGB. Pada artikel ini kita berbicara tentang format tidak terkompresi, jadi saya bahkan tidak akan mencantumkan tanda lainnya. Tampaknya struktur yang sama digunakan pada file JPEG dan PNG, karena mulai dari Windows 98 muncul opsi BI_JPEG yang menunjukkan bahwa gambar ini adalah JPEG dan BI_PNG, bahwa itu PNG (Saya tidak tahu apa-apa tentang format JPEG, Saya baru saja membuat kesimpulan ini berdasarkan apa yang tertulis di MSDN).
biSizeImage menunjukkan ukuran gambar dalam byte. Jika gambar tidak terkompresi (yaitu, kolom sebelumnya disetel ke BI_RGB), maka angka nol harus ditulis di sini. biXPelsPerMeter Dan biYPelsPerMeter menunjukkan, masing-masing, resolusi horizontal dan vertikal (dalam piksel per meter) dari perangkat akhir yang menjadi keluaran bitmap (raster). Sebuah aplikasi dapat menggunakan nilai ini untuk memilih bitmap yang paling sesuai dari sekelompok sumber daya untuk perangkat yang diinginkan. Faktanya adalah bahwa format bmp pada dasarnya adalah raster yang tidak bergantung pada perangkat keras, yaitu, ketika tampilan yang diperoleh tidak bergantung pada apa (bisa dikatakan) raster ini diproyeksikan. Misalnya, sebuah gambar akan terlihat sama terlepas dari apakah gambar itu digambar di layar monitor atau dicetak di printer. Tetapi resolusi perangkat berbeda, dan parameter ini digunakan untuk memilih gambar yang paling sesuai dari gambar yang tersedia.
biClrDigunakan menentukan jumlah warna yang digunakan dari tabel. Jika nilai ini nol, maka raster menggunakan jumlah warna maksimum yang diperbolehkan oleh nilai biBitCount. Ini hanya relevan untuk gambar terkompresi. Jika biClrUsed bukan nol dan biBitCount kurang dari 16, maka biClrUsed menentukan jumlah warna mesin grafis atau driver perangkat yang tersedia saat ini. Jika biBitCount lebih besar atau sama dengan 16, maka biClrUsed menentukan ukuran tabel warna yang digunakan untuk mengoptimalkan palet sistem saat ini.
biClrPenting- ini adalah jumlah warna penting. Menentukan jumlah warna yang dibutuhkan untuk menggambarkan gambar. Jika nilainya 0 (seperti biasanya), maka semua warna dianggap penting.
Jenis format BMP
Semua jenis format bmp secara kondisional dapat dibagi menjadi dua jenis: palet dan non-palet. Artinya, apakah palet digunakan dalam format tertentu atau tidak. Harap dicatat bahwa palet bahkan bisa dalam format bebas palet, tetapi tidak digunakan di sana. Pada bmps bebas palet, warna dihitung langsung dari bit yang masuk ke dalam file, dimulai dari tempat tertentu. Dan dalam palet, setiap byte menggambarkan satu atau lebih piksel, dan nilai byte (atau bit) adalah indeks warna dalam palet. Untuk memulainya, saya akan memberikan tabel yang membandingkan opsi yang memungkinkan. Jenis gambar (palet atau bebas palet) bergantung pada berapa banyak bit yang diberikan per piksel, yaitu pada nilai biBitCount dari struktur BITMAPINFOHEADER.
biBitCount | Format palet atau non-palet | Jumlah warna maksimum yang mungkin | Catatan | 1 | Palet | 2 | Gambar palet dua warna, ingat, belum tentu hitam dan putih. Jika bit raster (yang tepat di bawah) disetel ulang (sama dengan 0), berarti warna pertama dari palet harus ada di tempat ini, dan jika disetel (sama dengan 1), maka warna kedua. | 4 | Palet | 16 | Setiap byte menjelaskan 2 piksel. Berikut adalah contoh dari MSDN. Jika byte pertama pada gambar adalah 0x1F, maka itu sesuai dengan dua piksel, warna yang pertama adalah warna kedua dari palet (karena hitungan mundur dimulai dari nol), dan piksel kedua adalah warna kedua dari palet. warna palet ke-16. | 8 | Palet | 256 | Salah satu opsi paling umum. Tapi pada saat yang sama, yang paling sederhana. Paletnya memakan satu kilobyte (tapi lebih baik tidak mengandalkannya). Satu byte adalah satu warna. Apalagi nilainya adalah nomor warna di palet. | 16 | Tidak ada palet | 2^16 atau 2^15 | Ini adalah pilihan yang paling membingungkan. Mari kita mulai dengan fakta bahwa ini bebas palet, yaitu, setiap dua byte (satu kata WORD) dalam raster secara unik mendefinisikan satu piksel. Tapi inilah yang terjadi: ada 16 bit, dan ada 3 komponen warna (Merah, Hijau, Biru). Tapi 16 tidak mau dibagi 3. Oleh karena itu ada dua pilihan di sini. Yang pertama adalah menggunakan 15 bit, bukan 16, lalu ada 5 bit untuk setiap komponen warna. Dengan cara ini kita dapat menggunakan maksimal 2^15 = 32768 warna dan mendapatkan triple R-G-B = 5-5-5. Tapi kemudian sebagian dari 16 terbuang sia-sia. Tapi kebetulan mata kita, di antara semua warna, melihat warna hijau lebih baik, jadi kami memutuskan untuk memberikan sedikit ini pada komponen hijau, yaitu, lalu kami mendapatkan komponen hijau. triple R-G-B = 5-6-5, dan sekarang kita dapat menggunakan 2^16 = 65536 warna. Namun hal yang paling tidak menyenangkan adalah kedua opsi tersebut digunakan. MSDN menyarankan agar untuk membedakan berapa banyak warna yang digunakan, isi kolom biClrUsed dari struktur BITMAPINFOHEADER dengan nilai ini. Untuk memilih setiap komponen, Anda perlu menggunakan masker berikut. Untuk format 5-5-5: 0x001F untuk komponen biru, 0x03E0 untuk hijau, dan 0x7C00 untuk merah. Untuk format 5-6-5: masing-masing 0x001F - biru, 0x07E0 - hijau, dan 0xF800 merah. | 24 | Tidak ada palet | 2^24 | Dan ini adalah format paling sederhana. Di sini 3 byte mendefinisikan 3 komponen warna. Artinya, satu komponen per byte. Kita cukup membaca struktur RGBTRIPLE dan menggunakan kolom rgbtBlue, rgbtGreen, rgbtRed. Mereka masuk dalam urutan itu. | 32 | Tidak ada palet | 2^32 | Di sini 4 byte mendefinisikan 3 komponen. Namun, satu byte tidak digunakan. Bisa digunakan misalnya untuk saluran alpha (transparansi). Dalam hal ini, akan lebih mudah untuk membaca raster menggunakan struktur RGBQUAD, yang dijelaskan sebagai berikut: |
Penyimpanan data dalam format bmp
Nah, sekarang kita sampai pada bagian yang paling menarik. Setelah struktur BITMAPFILEHEADER dan BITMAPINFOHEADER muncullah palet. Terlebih lagi, jika formatnya bebas palet, maka format tersebut mungkin tidak ada, namun Anda tidak boleh mengandalkannya. Faktanya ketika saya baru mulai memahami format bmp, saya membaca di salah satu buku yang konon jika formatnya bebas palet, maka tidak ada palet sama sekali. Bahkan ada dua gambar - diagram format: satu dengan palet, yang lain tanpa palet. Dan saat itu saya sedang menulis sebuah program yang rajin mengoperasikan file bmp. Dan saya harus mengonversi gambar yang masuk dari 256 warna ke 24-bit (jika ada) menjadi file sementara. Dan saya sama sekali tidak membuat palet dalam 24-bit (bfOffBits dari struktur BITMAPFILEHEADER sama dengan jumlah sizeof(BITMAPFILEHEADER) + sizeof (BITMAPINFOHEADER), dan membiarkan 24-bit yang masuk tidak berubah. Dengan raster 256 warna semuanya berfungsi sebagaimana mestinya, sampai saya tidak menemukan gambar 24-bit yang menampilkan sampah di bagian bawah, bukan di bagian yang diperlukan. Saya tidak langsung mengerti apa yang salah sampai saya membandingkan ukuran file asli dengan teoritis yang seharusnya ada jika tidak ada palet. Perbedaannya ternyata tepat 1 KB. 1024 byte). Oleh karena itu, jangan pernah mengandalkan apakah ada palet dan jangan mengandalkan ukurannya (walaupun semua gambar yang saya temukan memiliki ukuran palet 256 warna, atau 1Kb), selalu pindahkan file ke awal raster, menggunakan bfOffBits. Palet adalah larik struktur RGBQUAD satu demi satu tidak semua warna digunakan dalam palet (tetapi hanya, misalnya, 16), maka seringkali 256 bidang dialokasikan untuk palet A 256 * 4 = 1024, di mana 4 adalah ukuran struktur RGBQUAD, yaitu sama satu kilobyte diperoleh.
Segera setelah palet muncul raster itu sendiri. Di sinilah segalanya menjadi lebih membingungkan. Pertama, piksel di sini dijelaskan seperti yang tertulis pada tabel di atas, bergantung pada formatnya. Dan mereka sendiri dapat berisi nilai komponen warna (untuk yang bebas palet), atau dapat berupa indeks dari array palet. Gambar itu sendiri direkam baris demi baris. Kedua, gambarnya tampak terbalik. Artinya, baris terbawah ditulis terlebih dahulu, kemudian baris kedua dari belakang, dan seterusnya hingga baris paling atas. Dan yang ketiga, seperti yang tertulis, jika ukuran garis raster bukan kelipatan 4, maka diisi dengan 1 sampai 3 byte kosong (nol) sehingga panjang garis tersebut merupakan kelipatan paragraf. Ini adalah hal yang paling tidak menyenangkan. Faktanya adalah bahwa untuk setiap format Anda harus menyesuaikan jumlah byte kosong ini (walaupun saya suka menulis bagian dari palet di sana, saya hanya tidak ingin membuat variabel "nol" tambahan jika byte ini tetap dilewati dan tidak ada seorang pun membutuhkannya). Saya menyediakan tabel dengan rumus yang menunjukkan format berapa byte yang harus ditambahkan di akhir baris. Di sana, variabel Lebar, seperti yang Anda duga, berarti lebar gambar. Semua formula ini dibuat secara eksperimental. Saya akan memberikan contoh hanya untuk format yang paling sering digunakan. Selebihnya, Anda bisa menulisnya sendiri.
Contoh program
Anda dapat mengunduh semua sumbernya. Saya tidak akan menulis banyak di sini. Saya hanya akan memberikan fungsinya dengan komentar.
Halo 1. Membuat gambar dalam format bmp.
Di sini gambar monokromatik tercipta. Ada tiga contoh fungsi tersebut: membuat bmp 8, 16 dan 24 bit. Saya akan memberikan hanya untuk 16-bit.
// Mari kita membuat gambar dalam format bmp 16 bit seperti 5-5-5, yang akan menjadi monokromatik
void CreateBmp555(char * fname, warna KATA)
{
MENANGANI hFile;
DWORD RW;
ke dalam aku, j;
// Deklarasikan struktur yang diperlukan
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
Palet BYTE[1024]; // Palet
// Mari kita punya gambar berukuran 35 x 50 piksel
int Lebar = 35;
int Tinggi = 50;
memset(Palet, 0, 1024); // Di palet kita punya angka nol, isi saja
memset(&bfh, 0 , ukuran(bfh) ) ;
Bfh.bfType = 0x4D42 ; // Mari kita nyatakan bahwa ini adalah bmp "BM"
bfh.bfOffBits = ukuran (bfh) + ukuran (bih) + 1024 ; // Paletnya memakan 1Kb, tapi kami tidak akan menggunakannya
bfh.bfSize = bfh.bfOffBits +
sizeof(warna) * Lebar * Tinggi +
Tinggi * ((ukuran (warna) * Lebar) % 4 ) ; // Hitung ukuran file akhir
memset(&bih, 0 , ukuran(bih) ) ;
bih.biSize = ukuran(bih); // Memang seharusnya begitu
bih.biBitCount = 16 ; // 16 bit per piksel
bih.biClrDigunakan = 32768 ; // Kita menggunakan 5-5-5
bih.biKompresi = BI_RGB; // Tanpa kompresi
bih.biTinggi = Tinggi;
bih.biWidth = Lebar;
bih.biPesawat = 1 ; // Seharusnya 1
// Dan kolom sisanya tetap 0
HFile = CreateFile(fname, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
jika (hFile == INVALID_HANDLE_VALUE)
kembali ;
// Tulis headernya
WriteFile (hFile, & bfh, sizeof (bfh) , & RW, NULL ) ;
WriteFile (hFile, & bih, sizeof (bih) , & RW, NULL ) ;
// Tulis paletnya
WriteFile(hFile, Palet, 1024, &RW, NULL);
untuk (saya = 0 ; saya<
Height;
i++
)
{
untuk (j = 0 ; j<
Width;
j++
)
{
WriteFile (hFile, & warna, sizeof (warna) , & RW, NULL ) ;
}
// Sejajarkan dengan batas
WriteFile (hFile, Palette, (sizeof (warna) * Lebar) % 4 , & RW, NULL ) ;
}
CloseHandle(hFile) ;
}
warna - warna gambar. Nilai variabel ini harus diisi sesuai tabel pertama. Anda dapat melihat gambar yang dihasilkan di ACDSee, misalnya. Saya baru mencoba membukanya di Photoshop, tapi ternyata tidak bisa membacanya dalam format ini. Tapi Anda bisa :).
Contoh 2. Mengubah gambar dari format 8-bit (256 warna) menjadi 24-bit.
BOOL Convert256To24 (char * fin, char * fout)
{
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
int Lebar, Tinggi;
Palet RGBQUAD[ 256 ] ;
BYTE * diBuf;
RGBTRIPLE * keluarBuf;
TANGANI hIn, hOut;
DWORD RW;
DWORD OffBits;
ke dalam aku, j;
HIn = BuatFile (sirip, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL) ;
jika (jam == INVALID_HANDLE_VALUE)
kembali SALAH;
HOut = CreateFile(fout, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
jika (hKeluar == INVALID_HANDLE_VALUE)
{
CloseHandle(hIn);
kembali SALAH;
}
// Baca datanya
ReadFile (hIn, & bfh, sizeof (bfh) , & RW, NULL ) ;
ReadFile (hIn, & bih, sizeof (bih) , & RW, NULL ) ;
ReadFile (hIn, Palette, 256 * sizeof (RGBQUAD) , & RW, NULL ) ;
// Menyetel penunjuk ke awal raster
SetFilePointer (hIn, bfh.bfOffBits, NULL, FILE_BEGIN) ;
Lebar = bih.biLebar ;
Tinggi = bih.biTinggi ;
OffBits = bfh.bfOffBits ;
// Alokasikan memori
inBuf = BYTE baru [ Lebar ] ;
outBuf = RGBTRIPLE baru [ Lebar ] ;
// Isi headernya
bfh.bfOffBits = ukuran (bfh) + ukuran (bih) ; // Mari kita tidak menulis palet
bih.biBitCount = 24 ;
bfh.bfSize = bfh.bfOffBits + 4 * Lebar * Tinggi + Tinggi * (Lebar % 4 ) ; // Ukuran file
// Dan sisanya tetap tidak berubah
// Tulis headernya
WriteFile (hOut, & bfh, sizeof (bfh) , & RW, NULL ) ;
WriteFile (hOut, & bih, sizeof (bih) , & RW, NULL ) ;
// Ayo mulai berkonversi
untuk (saya = 0 ; saya<
Height;
i++
)
{
ReadFile(hIn, inBuf, Lebar, & RW, NULL);
untuk (j = 0 ; j<
Width;
j++
)
{
outBuf[ j].rgbtRed = Palet[ inBuf[ j] ] .rgbRed ;
outBuf[ j].rgbtGreen = Palet[ inBuf[ j] ] .rgbGreen ;
outBuf[ j].rgbtBlue = Palet[ inBuf[ j] ] .rgbBlue ;
}
WriteFile (hOut, outBuf, sizeof (RGBTRIPLE) * Lebar, & RW, NULL ) ;
// Tulis sampah untuk penyelarasan
WriteFile (hOut, Palet, Lebar % 4 , & RW, NULL ) ;
SetFilePointer(hIn, (3 * Lebar) % 4, NULL, FILE_CURRENT) ;
}
hapus inBuf;
hapus keluarBuf;
CloseHandle(hIn);
CloseHandle(jamKeluar);
kembali BENAR;
}
Nama file sumber dan tujuan harus diteruskan ke fungsi masing-masing.
Penyebab paling umum dari masalah saat membuka file BMP hanyalah kurangnya aplikasi yang sesuai yang terinstal di komputer Anda. Dalam hal ini, cukup mencari, mengunduh, dan menginstal aplikasi yang menyajikan file dalam format BMP - program tersebut tersedia di bawah.
Sistem pencarian
Masukkan ekstensi file
Membantu
Petunjuk
Harap dicatat bahwa beberapa data yang dikodekan dari file yang tidak dapat dibaca oleh komputer kita terkadang dapat dilihat di Notepad. Dengan cara ini kita akan membaca potongan teks atau angka - Perlu diperiksa apakah metode ini juga berfungsi dalam kasus file BMP.
Apa yang harus dilakukan jika aplikasi dari daftar sudah diinstal?
Seringkali aplikasi yang diinstal secara otomatis tertaut ke file BMP. Jika hal ini tidak terjadi, maka file BMP berhasil dikaitkan secara manual dengan aplikasi yang baru diinstal. Cukup klik kanan pada file BMP, lalu dari daftar yang tersedia pilih opsi "Pilih program default". Maka Anda perlu memilih opsi “Lihat” dan temukan aplikasi favorit Anda. Perubahan yang dimasukkan harus disetujui menggunakan opsi "OK".
Program yang membuka file BMP
jendela
macOS
Mengapa saya tidak bisa membuka file BMP?
Masalah pada file BMP juga bisa disebabkan oleh hal lain. Terkadang bahkan menginstal perangkat lunak di komputer Anda yang mendukung file BMP tidak akan menyelesaikan masalah. Alasan ketidakmampuan untuk membuka dan bekerja dengan file BMP mungkin juga karena:
Asosiasi file BMP yang tidak pantas dalam entri registri
- kerusakan pada file BMP yang kita buka
- Infeksi file BMP (virus)
- sumber daya komputer terlalu sedikit
- driver ketinggalan jaman
- menghapus ekstensi BMP dari registri Windows
- instalasi program yang mendukung ekstensi BMP tidak lengkap
Memperbaiki masalah ini akan menghasilkan kebebasan membuka dan bekerja dengan file BMP. Jika komputer Anda masih mengalami masalah file, Anda perlu bantuan ahli yang akan menentukan penyebab pastinya.
Komputer saya tidak menampilkan ekstensi file, apa yang harus saya lakukan?
Dalam pengaturan sistem Windows standar, pengguna komputer tidak melihat ekstensi file BMP. Ini berhasil diubah di pengaturan. Buka saja "Panel Kontrol" dan pilih "Tampilan dan Personalisasi". Maka Anda harus pergi ke "Opsi Folder" dan membuka "Lihat". Di tab "Tampilan" ada opsi "Sembunyikan ekstensi jenis file yang dikenal" - Anda harus memilih opsi ini dan mengonfirmasi operasi dengan mengklik tombol "OK". Pada titik ini, ekstensi semua file, termasuk BMP, akan muncul diurutkan berdasarkan nama file.
Pengumuman
Format file gambar BMP Raster
BMP (file bitmap, format file bitmap yang tidak bergantung pada perangkat) adalah file bitmap yang digunakan untuk menyimpan gambar bitmap digital secara terpisah dari perangkat tampilan. Jenis file ini sebelumnya digunakan di Microsoft Windows dan OS/2. Istilah "raster" berasal dari gagasan programmer tentang bitmap. Gambar BMP biasanya tidak terkompresi atau terkompresi lossless (misalnya, menggunakan ZIP atau RAR - karena adanya data berlebihan dalam file). Saat ini, JPG adalah format gambar yang disukai - terutama karena ukuran file BMP yang besar, yang dapat menyebabkan masalah atau penundaan saat mengunduh, mengirim, atau mengunggah file.
Informasi teknis tentang file BMP
File BMP disimpan sebagai gambar 2D dengan berbagai ukuran, warna, dan kedalaman warna tanpa kompresi data, profil warna, atau saluran alfa. Gambar BMP disimpan dalam format bitmap yang tidak bergantung pada perangkat (DIB), artinya gambar memiliki warna, bukan spesifikasi sistem. Hal ini menjelaskan mengapa beberapa gambar BMP terlihat berbeda pada komputer yang berbeda. Gambar BMP dapat dilihat di perangkat apa pun, termasuk layar komputer dan televisi. Kurangnya paten telah membuat jenis gambar ini menjadi format yang populer untuk berbagai perangkat.
Informasi tambahan tentang format BMP
Ekstensi file | .bmp |
Kategori berkas | |
Contoh berkas | (2,7 MiB) (487,85 KiB) |
Program terkait | Adobe Photoshop MS Cat Editor Foto Microsoft Kuas |