首先,我知道在这个应用程序中不使用 python 将有助于加快我的代码速度。不幸的是,python 是我最熟悉的,我在这个项目上的时间有限。学习 C 或类似的东西对我的情况并不实用。
所以这是我的问题。我已将位图加载到 python 中并提取了像素数据,我将其存储为字符串形式的原始字节,例如:“143 200 30 -1”(这是一个值为 143 的字节,而不是写入所需的 3 个字符数字 143)。
我要做的是从字符串中删除每四个字节。第四个字节是 alpha 通道,我的应用程序不需要它。这是我到目前为止的代码,它获取了位于 blockY 和 blockX 位置的尺寸为 blockSizeX x blockSizeY 的图像的一部分,并在过程中去除了 alpha 通道:
def getScreenBlockFaster(bmpstr, imgWidth):
pixelData = ''
pixelCoord = (blockY * blockSizeY * imgWidth + blockSizeX * blockX)* 4
for y in range(blockSizeY * 4):
for x in range(0, blockSizeX * 4, 4):
pixelCoord += x
pixelData += bmpstr[pixelCoord : pixelCoord + 3]
pixelCoord += imgWidth * 4
return pixelData
这有效,但需要很长时间(几乎一整秒)。我希望为这个应用程序获得 5-10 fps,而这部分代码本身就太慢了。我计划对这段代码进行多线程处理,这会在一定程度上缓解速度问题,但我认为这仍然太慢了。我正在寻找的是一种更快的方式来采样这个位图,以便我可以获取部分数据,但我需要快速完成。有什么建议么?