2

glReadPixels から取得した生のピクセル データを JPEG 形式に変換したり元に戻したりするために利用できる C++ の例はありますか?

4

3 に答える 3

2

ImageMagick ライブラリを使用して、生データを jpeg 画像データに変換したり、その逆を行うことができます。同じライブラリを使用して、jpeg 画像データを raw (RGB) データに変換できます。

于 2010-11-18T12:31:56.260 に答える
1

そのために外部ライブラリを使用します。

画像ファイルを処理するための最高のスイスアーミーナイフであるDevILをお勧めします。あなたはただする必要があります

  • DevIL を介してメモリ内に RGB イメージを作成し、
  • glReadPixelsDevIL 画像を GL フレームバッファから読み取ったピクセルで埋めるための呼び出し、
  • を呼び出しilSaveImage("foo.jpg")てファイルを保存します。bmpなどを使用することもできpngます。形式はファイル名から自動検出されます。

単純。

于 2010-11-18T13:49:41.687 に答える
0

OpenGL が JPEG 画像の処理をサポートしているかどうかはわかりません。それは図書館の本当の目的ではありません。

ただし、ピクセル データにアクセスできるようになると、OpenCVを使用して簡単に画像を JPEG (またはその他の形式) に書き込むことができるようになります。ここにいくつかの疑似コードがあります。

/*
 * On Linux, compile with:
 *
 * g++ -Wall -ggdb -I. -I/usr/include/opencv -L /usr/lib -lm -lcv -lhighgui -lcvaux filename.cpp -o filename.out
 */

#include <cv.h>    
#include <highgui.h>

/*
 * Your image dimensions.
 */
int width;
int height;

CvSize size = cvSize(width, height);

/*
 * Create 3-channel image, unsigned 8-bit per channel.
 */
IplImage *image = cvCreateImage(size, IPL_DEPTH_8U, 3);

for (int i = 0; i < width; ++i)
for (int j = 0; j < height; ++j)
{
    unsigned int r;
    unsigned int g;
    unsigned int b;

    /*
     * Call glReadPixels, grab your RGB data.
     * Keep in mind that OpenCV stores things in BGR order.
     */
    CvScalar bgr = cvScalar(b, g, r);
    cvSet2D(image, i, j, bgr);
}

cvSaveImage("filename.jpg", image);
cvReleaseImage(&image);

調べてみると、JPEG を扱うための他のライブラリも存在します。

于 2010-11-18T04:33:45.530 に答える