将 RGBA 转换为 ARGB 像素格式
Convert RGBA to ARGB pixel format
我正在尝试将图像转换为以下 DDS 格式:
| Resource Format | dwFlags | dwRGBBitCount | dwRBitMask | dwGBitMask | dwBBitMask | dwABitMask |
+-----------------+----------+---------------+------------+------------+------------+------------+
| D3DFMT_A4R4G4B4 | DDS_RGBA | 16 | 0xf00 | 0xf0 | 0xf | 0xf000 |
D3DFMT_A4R4G4B4 16-bit ARGB pixel format with 4 bits for each channel.
我有这个 python 代码(使用 Wand 库):
# source is jpeg converted to RGBA format (wand only supports RGBA not ARGB)
blob = img.make_blob(format="RGBA")
for x in range(0, img.width * img.height * 4, 4):
r = blob[x]
g = blob[x + 1]
b = blob[x + 2]
a = blob[x + 3]
# a=255 r=91 g=144 b=72
pixel = (a << 12 | r << 8 | g << 4 | b) & 0xffff
我得到的第一个像素是 64328
,但我期待 62868
。
问题:
- 我的 RGBA 到 ARGB 转换错误吗?
- 为什么我没有得到想要的结果?
我的代码的预期输出(左)与实际输出(右):
@MartinBeckett 关于 scaling down
源像素从 8 位到 4 位的评论。我试图搜索如何做到这一点,并最终找到了解决方案。
简单地右移4位所以8-4=4
。最终代码为:
r = blob[x] >> 4
g = blob[x + 1] >> 4
b = blob[x + 2] >> 4
a = blob[x + 3] >> 4
pixel = (a << 12 | r << 8 | g << 4 | b) & 0xffff
尽管输出与预期输出之间仍然存在非常非常小的差异。 (有差异的部分)
输出:
预期:
资料来源:
我正在尝试将图像转换为以下 DDS 格式:
| Resource Format | dwFlags | dwRGBBitCount | dwRBitMask | dwGBitMask | dwBBitMask | dwABitMask |
+-----------------+----------+---------------+------------+------------+------------+------------+
| D3DFMT_A4R4G4B4 | DDS_RGBA | 16 | 0xf00 | 0xf0 | 0xf | 0xf000 |
D3DFMT_A4R4G4B4 16-bit ARGB pixel format with 4 bits for each channel.
我有这个 python 代码(使用 Wand 库):
# source is jpeg converted to RGBA format (wand only supports RGBA not ARGB)
blob = img.make_blob(format="RGBA")
for x in range(0, img.width * img.height * 4, 4):
r = blob[x]
g = blob[x + 1]
b = blob[x + 2]
a = blob[x + 3]
# a=255 r=91 g=144 b=72
pixel = (a << 12 | r << 8 | g << 4 | b) & 0xffff
我得到的第一个像素是 64328
,但我期待 62868
。
问题:
- 我的 RGBA 到 ARGB 转换错误吗?
- 为什么我没有得到想要的结果?
我的代码的预期输出(左)与实际输出(右):
@MartinBeckett 关于 scaling down
源像素从 8 位到 4 位的评论。我试图搜索如何做到这一点,并最终找到了解决方案。
简单地右移4位所以8-4=4
。最终代码为:
r = blob[x] >> 4
g = blob[x + 1] >> 4
b = blob[x + 2] >> 4
a = blob[x + 3] >> 4
pixel = (a << 12 | r << 8 | g << 4 | b) & 0xffff
尽管输出与预期输出之间仍然存在非常非常小的差异。 (有差异的部分)
输出:
预期:
资料来源: