python - 在 YUV 叠加上绘制透明矩形

标签 python pygame

使用pygame在Python中开发YUV查看器。

下面的代码显示一帧YUV 4:2:0

#!/usr/bin/env python

import pygame

W = 352
H = 288
WH = (W, H)

pygame.init()
screen = pygame.display.set_mode(WH)

overlay = pygame.Overlay(pygame.YV12_OVERLAY, WH)

fd = open('foreman.yuv', 'rb')
y = fd.read(W * H)
u = fd.read(W * H / 4)
v = fd.read(W * H / 4)

overlay = pygame.Overlay(pygame.YV12_OVERLAY, WH)

overlay.display((y, u, v))

此代码在位置 (0,0) 处显示一个 16x16 半透明矩形

pygame.init()
screen = pygame.display.set_mode(WH)

s = pygame.Surface((16,16))
s.set_alpha(128)
s.fill((255,255,255))
screen.blit(s, (0,0))
pygame.display.flip()

但是,我该如何组合它们呢? IE。如何在 YUV 数据顶部的 (0,0) 位置显示半透明矩形,以便可以通过矩形看到 YUV 数据?

最佳答案

这是一个叠加层。你不能把其他东西“放在上面”:来自 docs :

The overlay objects are always visible, and always show above the regular display contents.

YUV 覆盖利用媒体播放器通常使用的硬件来显示视频。内容通常永远不会写入“帧缓冲区”(对于屏幕截图/屏幕捕获软件等的空白区域造成无尽的痛苦)。

因此,您必须将要添加的内容直接绘制到 y、u、v 数据中。 (或者将y、u、v数据转换为RGB数据并通过更常规的方式显示)。

关于python - 在 YUV 叠加上绘制透明矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10263106/

相关文章:

python - 在由重复项组成的无序数组中查找唯一元素

java - 为什么 Jython Servlet post 请求中 fieldStorage 为空

python - 如何使用Python读取命令行生成的 "error"内容?

python - 如何在pygame中不让文本相互重叠?

python - 添加第二个 Sprite 不适用于 pygame 教程

python - 在 ORM 查询中使用变量作为字段

python - 如何在 numpy 中获得排序的累积值数组?

python - Pygame 中的曲面绘制

python - Pygame:将名称限制为 3 或 4 个字母

python - 如何: Overlapping of gray dots colors in pygame