大家好,我正在尝试在 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。