Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 13 kết quả

Đề tài: chuyển file .pcx thành file .pmb

  1. #1
    Ngày gia nhập
    05 2007
    Bài viết
    8

    Thumbs down chuyển file .pcx thành file .pmb

    mình vừa nhận được cái đề có tính ứng dụng rất căn bản và cũng khá lý thú nhưng loay hoay giải quyết 1 mình thì không vui tí nào pót lên đây anh em cùng xắn tay áo (hay xắn quần cũng được ) cùng làm với mình nha! rất mong sự cộng tác của anh em!
    đề :
    _đọc 1 file .pcx
    _đọc 1 file .bmp
    _chuyen file pcx -> .bmp
    _chuyen file bmp -> .pcx


    .....................strat.................

  2. #2
    Ngày gia nhập
    05 2007
    Bài viết
    8

    mình viết trên viúal studio 2005 mình khai báo và đọc cái header .pcx như vầy:

    [CODE = CPP]
    // PCX_Ver1.cpp : Defines the entry point for the console application.
    //
    #include "stdafx.h"
    #include "iostream"
    #include "fstream"
    #include "stdio.h"
    using namespace std;

    //cau truc mo ta cua 1 thanh phan mau (RGB)
    typedef struct RGB_ENTRY
    {
    unsigned char R;
    unsigned char G;
    unsigned char B;
    }RGB_ENTRY;

    //dinh nghia cau truc cua 1 Header!
    typedef struct PCX_HEADER
    {
    unsigned char manufacturer;
    unsigned char version;
    unsigned char encoding;
    unsigned char bitsPerPixel;
    short xMin;
    short yMin;
    short xMax;
    short yMax;
    short hDPI;
    short vDPI;
    RGB_ENTRY colorPalette[16];
    unsigned char reserved;
    unsigned char colorPlane;
    unsigned int bytesPerLine;
    unsigned int paletteInfo;
    char filter[58];
    }PCX_HEADER;

    typedef struct pcx_picture
    {
    PCX_HEADER header;
    RGB_ENTRY _256ExtendColorPalette[256];
    char * buffer;
    }pcx_picture;

    void PCX_Load(char *filename, pcx_picture &pic)
    {
    FILE *fp;
    int num_bytes,
    index;
    long count;
    unsigned char data;
    char *temp_buffer;
    //mo file
    fp = fopen(filename, "rb");
    //doc header
    fread(&pic.header, sizeof(PCX_HEADER), 1, fp);
    //kiem tra co phan mo rong ko?
    if(pic.header.bitsPerPixel == 8 && pic.header.colorPlane ==1)
    {
    int n = 256 * sizeof(RGB_ENTRY);
    fseek(fp, -n, SEEK_END);
    fread(pic._256ExtendColorPalette, sizeof(RGB_ENTRY),256, fp);
    }
    cout << ftell(fp); //--> 136??



    }
    void main()
    {
    pcx_picture pic;
    PCX_Load("BEAR.PCX", pic);
    }
    [/CODE]
    nhưng theo mình tìm hiểu thì cái header này chỉ có 128 bytes thui ko hieu sao khi dung ftell(fp) (sau khi đọc xong cái header ) thì nó lại xuất ra là 136
    các cao thu xem thử dùm mình nha!
    a` còn cái vụ giải nén cái file .pcx (theo RLE) nữa mới mệt đây...

  3. #3
    Ngày gia nhập
    05 2007
    Bài viết
    8

    mình viết trên viúal studio 2005 mình khai báo và đọc cái header .pcx như vầy:

    Code:
    // PCX_Ver1.cpp : Defines the entry point for the console application.
    //
    #include "stdafx.h"
    #include "iostream"
    #include "fstream"
    #include "stdio.h"
    using namespace	std;
    
    //cau truc mo ta cua 1 thanh phan mau (RGB)
    typedef struct RGB_ENTRY 
    {
    	unsigned char R;
    	unsigned char G;
    	unsigned char B;
    }RGB_ENTRY;
    
    //dinh nghia cau truc cua 1 Header!
    typedef struct PCX_HEADER 
    {
    	unsigned char manufacturer;
    	unsigned char version;
    	unsigned char encoding;
    	unsigned char bitsPerPixel;
    	 short  xMin;
         short  yMin;
         short  xMax;
         short  yMax;
         short  hDPI;
         short  vDPI;
    	RGB_ENTRY colorPalette[16];
    	unsigned char reserved;
    	unsigned char colorPlane;
    	unsigned int bytesPerLine;
    	unsigned int paletteInfo;
    	char filter[58];
    }PCX_HEADER;
     
    typedef struct pcx_picture
    {
    	PCX_HEADER header;
    	RGB_ENTRY  _256ExtendColorPalette[256];
    	char	* buffer;
    }pcx_picture;
    
    void	PCX_Load(char *filename, pcx_picture &pic)
    {
    	FILE *fp;
    	int num_bytes,
    		index;
    	long count;
    	unsigned char data;
    	char *temp_buffer;
    	//mo file
    	fp = fopen(filename, "rb");
    	//doc header
    	fread(&pic.header, sizeof(PCX_HEADER), 1, fp);
    	//kiem tra co phan mo rong ko?
    	if(pic.header.bitsPerPixel == 8 && pic.header.colorPlane ==1)
    	{
    		int n = 256 * sizeof(RGB_ENTRY);
    		fseek(fp, -n, SEEK_END);
    		fread(pic._256ExtendColorPalette, sizeof(RGB_ENTRY),256, fp); 
    	}
    	cout << ftell(fp); //--> 136??
    	
    	
    
    }
    void	main()
    {
    	pcx_picture pic;
    	PCX_Load("BEAR.PCX", pic);
    }
    nhưng theo mình tìm hiểu thì cái header này chỉ có 128 bytes thui ko hieu sao khi dung ftell(fp) (sau khi đọc xong cái header ) thì nó lại xuất ra là 136
    các cao thu xem thử dùm mình nha!
    a` còn cái vụ giải nén cái file .pcx (theo RLE) nữa mới mệt đây...

  4. #4
    Ngày gia nhập
    05 2007
    Bài viết
    8

    mình viết trên viúal studio 2005 mình khai báo và đọc cái header .pcx như vầy:

    C++ Code:
    1. // PCX_Ver1.cpp : Defines the entry point for the console application.
    2. //
    3. #include "stdafx.h"
    4. #include "iostream"
    5. #include "fstream"
    6. #include "stdio.h"
    7. using namespace std;
    8.  
    9. //cau truc mo ta cua 1 thanh phan mau (RGB)
    10. typedef struct RGB_ENTRY
    11. {
    12.     unsigned char R;
    13.     unsigned char G;
    14.     unsigned char B;
    15. }RGB_ENTRY;
    16.  
    17. //dinh nghia cau truc cua 1 Header!
    18. typedef struct PCX_HEADER
    19. {
    20.     unsigned char manufacturer;
    21.     unsigned char version;
    22.     unsigned char encoding;
    23.     unsigned char bitsPerPixel;
    24.      short  xMin;
    25.      short  yMin;
    26.      short  xMax;
    27.      short  yMax;
    28.      short  hDPI;
    29.      short  vDPI;
    30.     RGB_ENTRY colorPalette[16];
    31.     unsigned char reserved;
    32.     unsigned char colorPlane;
    33.     unsigned int bytesPerLine;
    34.     unsigned int paletteInfo;
    35.     char filter[58];
    36. }PCX_HEADER;
    37.  
    38. typedef struct pcx_picture
    39. {
    40.     PCX_HEADER header;
    41.     RGB_ENTRY  _256ExtendColorPalette[256];
    42.     char    * buffer;
    43. }pcx_picture;
    44.  
    45. void    PCX_Load(char *filename, pcx_picture &pic)
    46. {
    47.     FILE *fp;
    48.     int num_bytes,
    49.         index;
    50.     long count;
    51.     unsigned char data;
    52.     char *temp_buffer;
    53.     //mo file
    54.     fp = fopen(filename, "rb");
    55.     //doc header
    56.     fread(&pic.header, sizeof(PCX_HEADER), 1, fp);
    57.     //kiem tra co phan mo rong ko?
    58.     if(pic.header.bitsPerPixel == 8 && pic.header.colorPlane ==1)
    59.     {
    60.         int n = 256 * sizeof(RGB_ENTRY);
    61.         fseek(fp, -n, SEEK_END);
    62.         fread(pic._256ExtendColorPalette, sizeof(RGB_ENTRY),256, fp);
    63.     }
    64.     cout << ftell(fp); //--> 136??
    65.    
    66.    
    67.  
    68. }
    69. void    main()
    70. {
    71.     pcx_picture pic;
    72.     PCX_Load("BEAR.PCX", pic);
    73. }
    nhưng theo mình tìm hiểu thì cái header này chỉ có 128 bytes thui ko hieu sao khi dung ftell(fp) (sau khi đọc xong cái header ) thì nó lại xuất ra là 136
    các cao thu xem thử dùm mình nha!
    a` còn cái vụ giải nén cái file .pcx (theo RLE) nữa mới mệt đây...

  5. #5
    Ngày gia nhập
    09 2007
    Bài viết
    724

    Cả 2 thằng này đều áp dụng thuật toán nén dữ liệu RLE(Run Length Encoding-mã hóa theo độ dài lặp lại của dữ liệu) để chạy chỉ khác nhau về việc xử lý các trường hợp đặc biệt(truơng hợp phản tác dụng) thôi nên việc convert giữa 2 thằng này chỉ có 3 việc là: đọc lên -> giải nén -> nén lại với thuật toán tương ứng là được.


    ps: post quá nhiều bài giống nhau. Mod sẽ del bài viết của bạn đó.
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 01-10-2008 lúc 01:21 PM.

  6. #6
    Ngày gia nhập
    05 2007
    Bài viết
    8

    Mặc định chuyển file .pcx thành file .pmb

    mình biết tư tưởng nó là vậy nhưng mà khi mình bắt tay vào làm thi no sinh ra nhiều problem khó hiểu lắn bạn ơi, vd như việc mình giải nén cái thèng pcx theo RLE thôi mình cũng có thử nhưng mà bạn có biết cách nào để biết mình giải nén đúng ko vậy bạn!
    thanks attend!

  7. #7
    Ngày gia nhập
    09 2007
    Bài viết
    724

    đây là hàm giải mã file PCX của mình bạn tham khảo thêm nhé.

    C Code:
    1.  
    2. int PCXDecode_a_File(FILE *fEncode, FILE *fDecode)
    3. {
    4.     unsigned char c, n;
    5.     while (!feof(fEncode))
    6.     {
    7.         c = (unsigned char) getc(fEncode);
    8.         if (c == EOF)
    9.             break;
    10.         if ((c & 0xC0) == 0xC0)
    11.         {
    12.             n = c & 0x3f;
    13.             c = (unsigned char) getc(fEncode);
    14.         }
    15.         else n = 1;
    16.         for (int i=0; i<n; i++)
    17.             putc(c, fDecode);
    18.     }
    19.     fclose(fDecode);
    20.        return 1;
    21. }

  8. #8
    Ngày gia nhập
    05 2007
    Bài viết
    8

    mình cũng hiểu hiểu đoạn code này rùi nhưng bạn ơi, cái này là mình cần giải nén ra rồi ghi lên 1 buffer nào đó để tiện cho việc sau này mình còn phải chuyển nó qua file .bmp nửa mà, như vầy là bạn đả ghi nó ngược lại lên 1 file khác mất rùi!

  9. #9
    Ngày gia nhập
    07 2007
    Nơi ở
    TP HCM
    Bài viết
    66


    Thiệt tình là bó tay luôn.
    1 ông thì đang học CTDL 2. Đăng bài lên hỏi
    1 ông thì copy i chang tài liệu của thầy đem trả lời
    2 ông cùng học 1 trường + 1 thầy
    thêm 1 ông post bài trả lời này nữa là 3

    KHTN TP.HCM muôn năm

  10. #10
    Ngày gia nhập
    05 2007
    Bài viết
    8

    Dĩ nhiên là UNS = numberone ròy
    \(^_^)/
    hehe

Các đề tài tương tự

  1. Chuyển đổi file JFrame Form thành file java class trong netbeans như thế nào???
    Gửi bởi quanganhpd93 trong diễn đàn Thắc mắc lập trình Java
    Trả lời: 1
    Bài viết cuối: 02-03-2013, 08:47 AM
  2. Giới thiệu cách chuyển File Ảnh thành file Video trong download proshow gold
    Gửi bởi thuhu0900x trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 3
    Bài viết cuối: 03-07-2012, 03:54 AM
  3. Thuật toán chuyển từ file flash sang file pdf?
    Gửi bởi thitgaluoc trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 21-07-2011, 03:25 PM
  4. Chuyển 1 file html 25mb sang file word như thế nào ?
    Gửi bởi hoanglinh9466 trong diễn đàn Thắc mắc chung
    Trả lời: 3
    Bài viết cuối: 26-06-2011, 11:28 PM
  5. chuyển file bitmap 8bits tới file bmp 24bits hoặc ...
    Gửi bởi nguyenk2089@yahoo.com trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 07-11-2008, 05:15 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn