linux应用Xlib来显示内存图像数据到窗口的方式

本文介绍如何利用Xlib在Linux系统中直接显示从相机获取的内存图像数据,包括所需的窗口句柄、Display对象、GC、XImage等关键对象的初始化,并详细阐述了显示时窗口大小调整、部分刷新、缩放处理的实现,以及图像数据转换为显示数据的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于需要动态的将相机取得到图像数据动态的在窗口中显示,开始时试过好几个开源的显示库都没有达到想要到效果,SDL是最接近想要的效果的,可是目前到版本对于多窗口的显示支持还不完善,最终决定应用xlib来直接显示,归根结底这些库最终都是应用xlib来显示的。

在linux下 的xlib显示内存图像数据,几个需要的对象是:

unsigned long                     m_WinID;窗口句柄

Display *                        m_display;

GC                                 m_gc;

XImage *                        m_pDSPImage;

pthread_mutex_t                    m_lock_Screen;        //显示对象的互斥

//        绘图控制
    int                                m_nDrawStartX;    //起始坐标 x
    int                                m_nDrawStartY;    //起始坐标 y
    int                                m_nDrawWidth;    //绘图宽度
    int                                m_nDrawHeight;    //绘图高度


这些对象需要初始化:

根据传入的图像的宽高和位深来初始化相关对象资源

void DIBCreate(ULONG Width, ULONG Height, ULONG nColor) {
	if (0 == m_WinID)
		return;
	pthread_mutex_lock(&m_lock_Screen);
	m_display = XOpenDisplay(NULL);
	if (!m_display) {		return;
	}
	unsigned long valuemask = 0;
	XGCValues values;
	m_gc = XCreateGC(m_display, (Window) m_WinID, valuemask, &values);
	if (!m_gc) {
		XCloseDisplay(m_display);
		m_display = NULL;
		return;
	}

	Visual *visual = DefaultVisual(m_display, DefaultScreen(m_display));
	int imagedepth = DefaultDepth(m_display,DefaultScreen(m_display));
	//
	//创建屏幕大小的XImage的图像缓冲区,主要由于图像再大显示最大也超不出屏幕,提高显示效率 
 	unsigned int display_width, display_height;//屏幕尺寸
	display_width = DisplayWidth(m_display, DefaultScreen(m_display));
	display_height = DisplayHeight(m_display, DefaultScreen(m_display));

	m_pDSPImage = XCreateImage(m_display, visual, imagedepth, ZPixmap, 0, NULL,
			d
CxImage类库是一 个优秀的图像操作类库。它可以快捷地存取、显示、转换各种图像。有的读者可能说,有那么多优秀的图形库,如OpenIL,FreeImage, PaintLib等等,它们可谓是功能强大,齐全,没必要用其它的类库。但我要说,这些类库基本上没有免费的,使用这些类库,你要被这样那样的许可协议所 束缚。在这点上,CxImage类库是完全免费的。另外,在使用上述类库时,你会遇到重重麻烦。因为它们大部分是平台无关的,且用C语言写成,有的还夹杂 着基本的C++ wrapper和成堆德编译选项的声明需要你去处理。而CxImage类库在这方面做得很好。还有让我最看好的,就是作者完全公开了源代码。相对于那些封 装好的图形库和GDI+来说,这一点使我们可以进一步学习各种编解码技术,而不再浮于各种技术的表面。 CxImage是一个可以用于MFC 的C++类,可以打开,保存,显示,转换各种格式的图像文件,比如BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K 等格式的文件。可以实现BMP<->JPG,PNG <>TIFF格式等等的转换。 既可以实现图像文件的类型转换,也可以实现在内存图像数据的类型转换,并且使用很方便。 它的作者是: Davide Pizzolato ,主页: http://www.xdp.it/ 本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/king_lu/archive/2007/09/26/1802215.aspx
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值