首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用XShmGetImage和XShmPutImage

如何使用XShmGetImage和XShmPutImage
EN

Stack Overflow用户
提问于 2017-04-16 22:08:48
回答 1查看 3.1K关注 0票数 4

我的节目真的很慢。分析显示瓶颈在XGetImage中(不,我无法摆脱在循环中调用XGetImage )。在阅读时,推荐的解决方案是调用XShmGetImage,但是文档确实很糟糕。

我正在寻找关于如何调用XShmCreateImage、XShmGetImage和XShmSetImage的非常简单的示例代码。

深度分析肯定会使XGetImage成为根瓶颈,而不是XPutImage (是的,我知道调用XFlush以使分析准确),因此我可能会得出结论,对内存分配器的隐式调用实际上是缓慢的,但是除了XShmGetImage之外,没有一个XGetImage的变体允许我传递预先分配的XImage。无论如何,Shm函数的使用可能会有更大的改进。

EN

Stack Overflow用户

回答已采纳

发布于 2017-04-19 15:51:54

麻省理工学院-SHM文档不烂。它根本不存在。

以下是一个有用的咒语:

代码语言:javascript
运行
复制
  Display *d;
  int s;
  XImage *image;
  XShmSegmentInfo shminfo;
  d = XOpenDisplay(NULL);
  s = DefaultScreen(d);

  image = XShmCreateImage(d, 
      DefaultVisual(d,0), // Use a correct visual. Omitted for brevity     
      24,   // Determine correct depth from the visual. Omitted for brevity
      ZPixmap, NULL, &shminfo, 100, 100); 

  shminfo.shmid = shmget(IPC_PRIVATE,
      image->bytes_per_line * image->height,
      IPC_CREAT|0777);

  shminfo.shmaddr = image->data = shmat(shminfo.shmid, 0, 0);
  shminfo.readOnly = False;

  XShmAttach(d, &shminfo);

  XShmGetImage(d,
      RootWindow(d,0),
      image,
      50,
      50,
      AllPlanes);
票数 13
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43442675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档