glReadPixels から取得した生のピクセル データを JPEG 形式に変換したり元に戻したりするために利用できる C++ の例はありますか?
2052 次
3 に答える
2
ImageMagick ライブラリを使用して、生データを jpeg 画像データに変換したり、その逆を行うことができます。同じライブラリを使用して、jpeg 画像データを raw (RGB) データに変換できます。
于 2010-11-18T12:31:56.260 に答える
1
そのために外部ライブラリを使用します。
画像ファイルを処理するための最高のスイスアーミーナイフであるDevILをお勧めします。あなたはただする必要があります
- DevIL を介してメモリ内に RGB イメージを作成し、
glReadPixels
DevIL 画像を 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 に答える