2010-12-16 14 views
2

私のコードの出力XImageをビットマップに変換しましたが、出力ファイルが大量ですので、lzrwを使用して圧縮することを考えました このコードを使用してビットマップビットマップをファイルFILE *またはXImageからPNGに書き込む

fwrite(&bmpFileHeader, sizeof(bmpFileHeader), 1, fp); 
fwrite(&bmpInfoHeader, sizeof(bmpInfoHeader), 1, fp); 
fwrite(pImage->data, 4*pImage->width*pImage->height, 1, fp); 

を提出することがとにかくあり、私は(のchar *)に書き込む(ファイル*)のinstedので、私はそれにlzrw圧縮を使用することができますでしょうか? 、さらにはXImageを直接PNGに変換する何らかの方法があります。

ありがとうございます;

+0

私はのImlib2を考えている: -


EDITは何が価値があるため、LodePNGを使用してPNG画像を保存するための私のコードは次のようになります。 –

答えて

1

代わりfwrite

char* tmp = buf; 
memcpy(tmp, &bmpFileHeader, sizeof(bmpFileHeader)); 
tmp += sizeof(bmpFileHeader); 
memcpy(tmp, &bmpInfoHeader, sizeof(bmpInfoHeader)); 
tmp += sizeof(bmpInfoHeader); 
memcpy(tmp, pImage->data, 4*pImage->width*pImage->height); 

EDITの使用memcpy:私は、コードを更新し、メモリ内のコピーについて

+0

はい、確かです。私はコード – DReJ

+0

、ありがとう、病気を試してみてください – killercode

+0

didntの仕事:私はそれがファイルにはtmpファイルを保存しようとすると、S! – killercode

0

を指摘してthaks @bdk、DReJが言うようにmemcpyを使用しますが、あなたがしたい場合はPNGなどの画像を保存し、あなたがLodePNGのような素敵なシンプルなPNGライブラリに見てより悪い行うことができます:

http://members.gamedev.net/lode/projects/LodePNG/

簡単な選択肢があれば、自分自身の圧縮側を自分でやり直す時間を無駄にすることはありません - あなたが取り組むことができるより重要な問題があります。

void PNGSaver::save_image24(const std::string& filename, const Image24_CPtr& image) 
{ 
    std::vector<unsigned char> buffer; 
    encode_png(image, buffer); 
    LodePNG::saveFile(buffer, filename); 
} 

void PNGSaver::encode_png(const Image24_CPtr& image, std::vector<unsigned char>& buffer) 
{ 
    int width = image->width(); 
    int height = image->height(); 
    const int pixelCount = width*height; 

    // Construct the image data array. 
    std::vector<unsigned char> data(pixelCount*4); 
    unsigned char *p = &data[0]; 
    for(int y=0; y<height; ++y) 
     for(int x=0; x<width; ++x) 
     { 
      Pixel24 pixel = (*image)(x,y); 
      *p  = pixel.r(); 
      *(p+1) = pixel.g(); 
      *(p+2) = pixel.b(); 
      *(p+3) = 255; 
      p += 4; 
     } 

    // Encode the PNG. 
    LodePNG::encode(buffer, &data[0], width, height); 
} 
+0

は素晴らしいようですが、このライブラリを使用してXImageを保存する方法がわかりませんでした。私はサンプルをチェックしましたが、必要なものを行う方法を示すものはありませんでした...( – killercode

+0

@killercode:関連サンプルはC++サンプルの例3、btw。 –

+0

イメージデータこれはXImageをPNGに変換する方法ですか、ビットマップをPNGに変換するのですか? – killercode

関連する問題