данные пикселей OpenGL в формате JPEG - PullRequest
2 голосов
/ 18 ноября 2010

Какие-либо примеры C ++ доступны для преобразования необработанных данных пикселей, полученных из glReadPixels, в формат JPEG и обратно?

Ответы [ 3 ]

2 голосов
/ 18 ноября 2010

Вы можете использовать библиотеку ImageMagick для преобразования необработанных данных в данные изображений JPEG и наоборот.Используя ту же библиотеку, вы можете конвертировать данные изображений JPEG в необработанные (RGB) данные.

1 голос
/ 18 ноября 2010

Используйте для этого внешнюю библиотеку.

Я рекомендую DevIL , ваш швейцарский армейский нож номер один для работы с файлами изображений. Вам просто нужно будет

  • создать RGB-изображение в памяти через DevIL,
  • вызовите glReadPixels, чтобы заполнить ваше изображение DevIL пикселями, считанными из кадрового буфера GL,
  • вызов ilSaveImage("foo.jpg") для сохранения файла. Вы также можете использовать bmp, png и еще несколько - формат будет автоматически определяться по имени файла.

Simple.

0 голосов
/ 18 ноября 2010

Я не уверен, поддерживает ли 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, если вы посмотрите вокруг.

...