- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想了解从 XGetImage
获取的数据是如何在内存中处理的:
XImage img = XGetImage(display, root, 0, 0, width, height, AllPlanes, ZPixmap);
现在假设我想分解红色、蓝色、绿色 channel 中的每个像素值。我怎样才能以便携的方式做到这一点?以下是一个示例,但它取决于 XServer 的特定配置,并非在所有情况下都有效:
for (int x = 0; x < width; x++)
for (int y = 0; y < height; y++) {
unsigned long pixel = XGetPixel(img, x, y);
unsigned char blue = pixel & blue_mask;
unsigned char green = (pixel & green_mask) >> 8;
unsigned char red = (pixel & red_mask) >> 16;
//...
}
在上面的示例中,我假设 pixel
中的 RGB
channel 具有特定顺序,并且像素是 24 位深度:事实上,我有 img->depth=24
和img->bits_per_pixels=32
(屏幕也是24位深度)。但这不是一般情况。
作为第二步,我想摆脱 XGetPixel 并直接使用或描述 img->data。我需要知道的第一件事是 Xlib
中是否有任何东西可以准确地为我提供解释如何从 img->data
开始构建图像所需的所有信息> 字段,它们是:
最佳答案
移位是掩码的一个简单函数:
int get_shift (int mask) {
shift = 0;
while (mask) {
if (mask & 1) break;
shift++;
mask >>=1;
}
return shift;
}
每个 channel 中的位数就是其掩码中 1 的位数(数一数)。 channel 顺序由位移决定(如果红移为0,则第一个 channel 为R,等等)。
我认为 bits_per_pixel 的有效值是 1、2、4、8、15、16、24 和 32(15 和 16 位是相同的每像素 2 字节格式,但前者有 1 位未使用)。我认为除了 24 和 32 bpp 之外,任何人都不值得花时间去支持任何东西。
X11 不关心媒体文件,所以没有 4CC 代码。
关于linux - 如何解释 XImage 的字段 'data',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14224293/
我正在尝试创建将捕获桌面视频(帧)的 JNI C++ 库。第一步是简单地制作桌面屏幕截图。代码是: #include #include using namespace std; int main(
我知道的唯一事实是 XImage存储在客户端,像素图存储在服务器端。有这么简单吗? 那么XY是什么?和 Z Pixmaps为什么X需要这么多类型的图像格式? 为什么没有XY和 Z Images ? 什
我正在尝试制作一个以图形方式重复鼠标指针的应用程序,因此我最终可以为 Ubuntu 18.04 制作一个鼠标轨迹程序 - 看起来,这样做的方法是通过 X11/Xlib - 虽然,这些天我没有甚至不知道
我想了解从 XGetImage 获取的数据是如何在内存中处理的: XImage img = XGetImage(display, root, 0, 0, width, height, AllPlane
我阅读了 Xft 库的引用资料,但它似乎只在服务器站点可绘制对象上绘制文本:Pixmap 或 Window。原生 xlib 文本绘制函数也是如此。 但是如何在客户端站点内存中具有像素数组的 XImag
我有一个包含来自图片的 RGBA(实际上我不关心 alpha channel )值的 vector ,我想用 xlib 绘制这张图片。所以我必须使用 XImage 并获得一个我需要使用的 XCreat
我正在使用 xlib。 我有一个 XImage 结构,其中填充了来自 XGetImage() 调用的信息。是否有一种流行的方法可以从 XImage 转换为更有意义的东西.. 即 PNG? 我看过 li
我正在使用 PDFsharp 在 PDF 上插入图像。该图像作为数据库中的二进制对象出现。要使用 PDFsharp 插入它,我需要将它作为 XImage。到目前为止,这是我正在尝试的: XImage
我已经从屏幕截图中的 XGetImage() 获得了一个 XImage 对象,但现在我不知道如何处理它。我正在使用 C++。谢谢。 最佳答案 您可以做的下一个最好的事情是使用 XPutImage()
我正在尝试使用 XGetImage 捕捉图像。一切都很好,但我需要将数据发送到一个需要 RGB 四边形数组的模块。为图像中的每个像素调用 XGetPixel 非常慢(在 1440x900 分辨率的 i
我正在使用以下代码将 XImage 写入文件“bitmap0.bmp”,但是当我在 fedora 中使用 imageViewer 打开新创建的文件时,出现“文件过早结束”错误并且不显示任何内容。谁能指
设置 使用 XLib,我正在创建每像素 32 位的窗口以及 32 bpp 的 XImage 对象。 起初我在窗口上绘制不透明的矩形以删除背景。 然后我尝试在窗口上绘制创建的半透明 XImage。 在这
我正在使用 Ubuntu Linux 和 C++ 进行开发。 我将桌面图像捕获到 XImage。 如何将XImage保存为PNG格式的base64字符串? 最佳答案 这是一个将 XImage 数据转换
我是一名优秀的程序员,十分优秀!