嘿所有, 我想用在Gtk :: DrawingArea中绘制活动图像,就像它们在火车站的显示器中显示的一样,机场,地铁等。GTKMM ::在GTk :: Drawing区域中使用单个Gdk :: PixBuf绘制多个图像
对于目前的测试目的,我硬编码我的代码。
在这里它是
的Gtk ::绘图区域宽度= 720,高度= 640。 我有first.pgm和second.pgm图像,每个图像都有360 * 640的分辨率(是的,我将它旋转用于测试目的)。 这些图像每像素包含一个字节。
1)当单张图像dr drawing时画得很好。 我只是将图像读入大小为360 * 640 * 3的无符号字符*缓冲区。 我看过像这样
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。