【发布时间】:2014-07-03 14:04:19
【问题描述】:
大家好, 我正在尝试在 Gtk::DrawingArea 中绘制实时图像,其方式与它们在火车站、机场、地铁等的监视器中显示的方式相同。
为了当前的测试目的,我已经硬编码了我的代码。
在这里
Gtk::绘图区宽度=720,高度=640。 我有 first.pgm 和 second.pgm 图像,每个图像都有 360*640 尺寸。(是的,我为了测试目的旋转了它。) 这些图像每个像素包含一个字节。
1) 绘制单个图像时绘制良好。 我只是将图像读入大小为 360*640*3 的 unsigned char* 缓冲区。 我是这样读的
int bufferIndex=0;
int fileIndex=0; //just assume
for (int i=0; i<height; i++)
{
for (int j=0; j<width; j++)
{
//below three lines are for RGB purpose required in Gdk::Pixbuf
buffer[bufferIndex++] = //File[fileIndex];
buffer[bufferIndex++] = //File[fileIndex];
buffer[bufferIndex++] = //File[fileIndex];
}
}
Gdk::Colorspace colorSpace = Gdk::COLORSPACE_RGB;
Gdk::Colorspace colorSpace = (Gdk::Colorspace)0;
bool has_alpha = false;
int bits_per_sample = 8;
int rowStride = 360*3; // distance between rows in bytes
Glib::RefPtr<Gdk::Pixbuf> pixBuf = Gdk::Pixbuf::create_from_data((const guint8 *) buffer,
colorSpace, has_alpha, bits_per_sample, 360, 640, rowStride);
Glib::RefPtr<Gdk::GC> gcContext;
pixBuf->render_to_drawable(drawingArea pointer, gcContext, 0, 0, 0 , 0 , 360, 640, Gdk::RGB_DITHER_MAX, 0, 0);
//It prints the image in the left half of drawing area.
这和我预期的一样,但是当我尝试绘制两个图像时出现了问题。 为此,我在缓冲区中读取 first.pgm,然后读取 second.pgm(意味着总 [360*640*3]*2 字节) 现在我绘制它,如代码所示。
Glib::RefPtr<Gdk::GC>gcContext;
Gdk::Colorspace colorSpace = Gdk::COLORSPACE_RGB;
Gdk::Colorspace colorSpace = (Gdk::Colorspace)0;
bool has_alpha = false;
int bits_per_sample = 8;
int rowStride = 360*3; // distance between rows in bytes
Glib::RefPtr<Gdk::Pixbuf> pixBuf = Gdk::Pixbuf::create_from_data((const guint8 *) buffer,
colorSpace, has_alpha, bits_per_sample, 720, 640, rowStride);
pixBuf->render_to_drawable(drawingarea pointer, gcContext, 0, 0, 0 , 0 , 720, 640, Gdk::RGB_DITHER_MAX, 0, 0);
在两半中,都会打印 first.pgm。
【问题讨论】:
标签: c++ gtk gtk3 gtkmm gdkpixbuf