c语言 - 如何使用 Xlib/XRender 渲染缩放像素缓冲区



在启动时,我分配:u32 *pixel_buffer = calloc(width * height, 4);

我希望将其缩放到窗口的当前宽度和高度。我的尝试:

  1. 使用XCreateImage/XPutImage在启动时正确呈现 窗口尺寸与像素缓冲区的尺寸匹配。上 窗口大小调整 但是,缓冲区的内容不会缩放,并且 多余的空间用黑色填充(背景的值 我为窗口设置的像素)
  2. 使用XPutImagePixmap。然后每次循环迭代,使用XRenderCreatePicture关于这个PixmapWindowXRenderComposite他们。这只会产生黑屏。

有什么建议吗?

XPutImage(display, pixmap, default_gc, x_image, 
0, 0, 0, 0, pixel_buffer_width, pixel_buffer_height);
Picture src_pict = XRenderCreatePicture(display, pixmap, pic_format, 0, &pic_attributes);
Picture dst_pict = XRenderCreatePicture(display, window, pic_format, 0, &pic_attributes);
double x_scale = pixel_buffer_width / window_width;
double y_scale = pixel_buffer_height / window_height;
XTransform transform_matrix = {{
{XDoubleToFixed(x_scale), XDoubleToFixed(0), XDoubleToFixed(0)},
{XDoubleToFixed(0), XDoubleToFixed(y_scale), XDoubleToFixed(0)},
{XDoubleToFixed(0), XDoubleToFixed(0), XDoubleToFixed(1.0)}  
}};
XRenderSetPictureTransform(display, src_pict, &transform_matrix);
XRenderComposite(display, PictOpSrc, src_pict, 0, dst_pict, 
0, 0, 0, 0, 0, 0,
window_width, window_height);

最新更新