awali setiap pekerjaan dengan "bismillah" dan akhiri dengan "hamdalah" semoga semua menjadi berkah :)

Minggu, 18 Desember 2011

pcx


PCX mengompresi data

Algoritma pengkodean data yang digunakan dalam file PCX adalah 1-byte/2-byte run-length encoding skema sederhana. Sementara jenis pengkodean bukan yang paling efektif dalam hal mengurangi ukuran data, sangat cepat dalam operasi dan cukup mudah untuk diimplementasikan.
Gambar biasanya mengandung banyak seri berjalan pixel, yaitu, dua atau lebih piksel yang berdekatan dengan nilai yang sama. Menggunakan jangka-panjang data skema kompresi, lari dari piksel beberapa byte panjangnya dapat dikonversi ke kode hanya berjalan dua byte panjangnya.
Data dikodekan adalah membaca satu byte pada suatu waktu. Jika kedua bit yang paling signifikan (MSB) dari membaca byte pertama di set ke 1, maka byte ini adalah byte pertama dari kode dijalankan 2-byte. Byte pertama dalam kode dijalankan 2-byte selalu mengandung jumlah yang lebih rendah berjalan dalam enam bit, yang merupakan panjang jangka piksel. Oleh karena itu, menjalankan piksel mungkin 1-63 pixel panjang.
Menggunakan dua bit paling signifikan untuk menunjukkan kode 2-byte bukan hanya satu, MSB adalah peninggalan dari hari-hari awal Kuas CGA. Gunakan hanya satu MSB mengakibatkan kompresi miskin untuk data CGA, jadi dua yang digunakan bukan.
Byte kedua dari kode dijalankan 2-byte adalah nilai dari pixel berjalan sendiri. Nilai ini mungkin dalam kisaran 0 sampai 255 dan ditulis ke output beberapa kali sama dengan jumlah dijalankan.
Jika byte run-count adalah membaca dan dua MSBs adalah 0 keduanya, maka byte ini adalah byte run-nilai, dan jumlah dijalankan dianggap 1. Kode ini dijalankan 1-byte digunakan untuk mencegah berjalan 1-pixel dari pengkodean ke dalam kode dijalankan 2-byte.
Skema pengkodean RLE PCX tidak sempurna, namun. Sebuah kode dijalankan 1-byte dapat berisi nilai hanya berjalan di kisaran 0 hingga 63. Jika nilai pixel dijalankan dalam kisaran 64-255, kode jalankan 2-byte harus digunakan sebagai gantinya. Jika gambar berisi piksel tunggal banyak berjalan dari nilai warna yang lebih besar dari 63, peningkatan ukuran gambar data dapat terjadi setelah pengkodean PCX. Seperti peningkatan ukuran data biasanya terjadi hanya dalam gambar sangat bising atau kasar.

File Format decoding PCX

Untuk decode file dalam format PCX, Anda harus membaca header dari file dan menghitung data berikut:
  • Lebar gambar dalam piksel
  • Panjang gambar di scan lines
  • Jumlah byte yang diperlukan untuk mengadakan garis scan didekode
  • Jumlah byte bantalan pada akhir setiap garis pindai
Hitung lebar gambar dan tinggi dari nilai-nilai citra dimensi sebagai berikut:
 ImageWidth = XEnd - XStart + 1; / * Lebar gambar dalam piksel * /
ImageHeight = YEnd - YStart + 1; / * Panjang gambar di scan lines * /
Menghitung jumlah byte yang diperlukan untuk mengadakan garis scan didekode diperlukan jika data gambar decode akan disimpan dalam buffer. Hal ini juga diperlukan untuk menentukan apakah data citra telah dikodekan di scan lines. Jumlah pesawat warna dikalikan dengan jumlah byte per baris per pesawat menghasilkan nilai ini:
 ScanLineLength = NumBitPlanes * BytesPerLine;
Panjang padding di akhir garis scan dapat ditentukan dengan menghitung jumlah piksel dalam sebuah garis scan unencoded dan membandingkan nilai ini dengan lebar pixel dari gambar yang ditampilkan:
 LinePaddingSize = ((BytesPerLine * NumBitPlanes) *
                                  (8 / BitsPerPixel)) - ((XEnd - XStart) + 1);
Langkah-langkah decoding adalah sebagai berikut:
  1. Baca byte.
  2. Jika dua MSBs di set ke 1, maka topeng dari jumlah dijalankan.
  3. Baca byte berikutnya.
  4. Menulis byte beberapa kali sama dengan jumlah dijalankan.
  5. Lain, jika dua MSBs ditetapkan ke 0, maka topeng dari nilai lari.
  6. Menulis byte sekali.
  7. Ulangi langkah 1 sampai 6 sampai buffer penuh.
Kode yang digunakan untuk memecahkan kode garis scan dari informasi seperti yang ditunjukkan sebagai berikut:
 / * ** Decode garis PCX scan.  ** ** Dalam contoh ini ukuran Buffer [] dan nilai BufferSize ** adalah sama dengan panjang garis scan.  Data dibaca dari FILE ** aliran fpIn dan ditulis ke Buffer [].  * / Do {byte = GetByte (fpIn); / * Dapatkan byte berikutnya * / if ((byte & 0xC0) == 0xC0) / * 2-byte kode * / RunCount = byte & 0x3F; count / * Dapatkan dijalankan * / runvalue = GetByte (fpIn); / * Dapatkan nilai pixel * /} else / * kode 1-byte * / {RunCount = 1; / * menghitung Run adalah salah satu * / runvalue = byte; / * nilai Pixel * /} / * Tulis piksel lari ke buffer * / untuk (total + = RunCount; / * Update Total * / RunCount & & index <BufferSize; / * Jangan membaca * buffer masa lalu / RunCount -, indeks + +) / * Update counter * / Buffer [index] = runvalue; / * Tetapkan nilai ke buffer * /} while (indeks <BufferSize); / * Baca sampai akhir buffer * / 
Para PCX spesifikasi menyatakan bahwa istirahat decoding harus terjadi di akhir setiap garis pindai. Ini berarti bahwa ketika lari dari data sedang dikodekan, dan akhir dari garis scan tercapai, jalankan harus berhenti dan tidak melanjutkan menyeberang ke garis scan berikutnya, apakah mungkin untuk menghentikannya.
Decoding dapat menjadi rumit oleh file PCX yang telah dikodekan mengabaikan aturan ini. Encoding di scan lines keuntungan byte beberapa tambahan kompresi, tapi proses decoding garis scan tunggal dibuat jauh lebih sulit.

Encoding data PCX Gambar

Skema untuk encoding garis scan cukup mudah hanya dengan beberapa pengecualian. Data mentah ini membaca satu byte pada suatu waktu. Satu-satunya informasi yang dibutuhkan adalah jumlah byte dalam garis scan. Berikut ini adalah prosedur untuk encoding data gambar menggunakan algoritma kompresi PCX:
  1. Membaca byte data pixel, dan menyimpan nilai.
  2. Set counter untuk 1.
  3. Baca byte berikutnya, dan periksa apakah itu adalah sama dengan nilai yang disimpan.
  4. Jika itu adalah sama, kenaikan konter.
  5. Jika tidak sama dan menghitung lebih besar dari satu, atau menghitung adalah 63, atau jika akhir garis scan telah tercapai, maka masker pada dua MSBs, dan output nilai hitungan.
  6. Output nilai data.
  7. Ulangi langkah 1 sampai semua meskipun 6 scan lines sudah dibaca.

PCX Format Data Gambar

Setelah garis scan telah diterjemahkan, format data yang berisi tergantung pada BitsPerPixel dan nilai-nilai NumBitPlanes ditemukan di header. Mengetahui format data dari garis scan diperlukan sehingga Anda dapat mengurai data pixel dari sebuah garis scan untuk menampilkan gambar atau konversi dari file gambar dari satu format ke format lainnya. Scan lines Semua dalam file PCX selalu memiliki format yang sama.
Scan-line data pixel disimpan dalam salah satu dari dua cara - baik piksel berorientasi atau berorientasi pesawat. Pixel-berorientasi data disimpan dengan semua data pixel (baik data yang nyata atau indeks ke palet warna) dalam garis berdekatan. Pesawat-data berorientasi unrolls data pixel menjadi merah, komponen hijau, dan biru dan kelompok mereka dengan warna di garis scan.
Single-pesawat data disimpan piksel demi piksel dalam satu pesawat lama yang berjalan panjang garis scan. Data dalam garis scan tidak data gambar yang sebenarnya itu sendiri tetapi bukan serangkaian nilai indeks menjadi baik palet warna EGA atau VGA. Pengecualian untuk data-pesawat tunggal adalah gambar 1-bit monokrom, di mana masing-masing bit dalam sebuah peta garis scan secara langsung sebagai nilai piksel.
Berapa banyak scan-line data piksel tunggal menempati ditentukan dari nilai BitsPerPixel. Misalnya, dengan satu bit per pixel, setiap byte dari scan-line data berisi delapan nilai piksel. Dengan delapan bit per pixel, setiap byte dari scan-line data berisi satu nilai piksel. Monokrom, CGA, dan 256-warna gambar VGA biasanya hanya berisi pesawat tunggal per baris scan.
Garis scan dengan tiga pesawat jarang terjadi, tapi mereka memang ada. 24-bit PCX gambar disimpan menggunakan tiga byte per pixel tersebar di tiga pesawat. The 24-bit data nilai nilai warna sebenarnya untuk gambar, dan tidak ada palet warna yang digunakan. Kuas untuk Windows 2.0 menggunakan format data yang 3-plane/1-bit untuk menyimpan 8-warna gambar, dimana setiap nilai piksel adalah indeks ke dalam palet warna EGA.
Gambar dengan empat pesawat biasanya 16-warna gambar EGA. Selain merah, hijau, dan biru pesawat, ada intensitas warna pesawat keempat yang khusus untuk kartu tampilan EGA. Scan-baris data dalam 4-pesawat gambar berisi nilai indeks ke dalam palet EGA.

Format File terkait

Beberapa format lain spin-off langsung dari format file PCX. Dan dalam kebanyakan kasus mereka hanya versi khusus dari PCX.

PCC Format file gambar

Versi sebelumnya dari Kuas PC memiliki kemampuan kliping dan menyalin area dari gambar PCX dan menyimpannya ke sebuah file menggunakan Copy Untuk ... perintah. File yang dihasilkan disimpan sebagai file format PCX dengan ekstensi PCC,. Mungkin untuk menunjukkan bahwa file gambar yang terkandung adalah sebagian dari gambar lain. Versi saat ini dari Kuas PC tidak menggunakan ekstensi. PCC dan menggunakan ekstensi. PCX sebagai gantinya.

Tidak ada komentar:

Posting Komentar

www.twitter.com/zakiahhusna" Follow Me on Twitter">