u8 rgb888数组转U32 argb8888数组代码
时间: 2023-09-14 19:14:21 浏览: 246
以下是将u8 rgb888数组转换为u32 argb8888数组的代码:
```
unsigned char *rgb888_array; // input array
unsigned int *argb8888_array; // output array
for (int i = 0; i < input_size; i++) {
unsigned char red = rgb888_array[i * 3];
unsigned char green = rgb888_array[i * 3 + 1];
unsigned char blue = rgb888_array[i * 3 + 2];
// ARGB = 0xAARRGGBB
unsigned int argb8888 = 0xFF000000 | (red << 16) | (green << 8) | blue;
argb8888_array[i] = argb8888;
}
```
在上面的代码中,我们首先声明了一个指向u8 rgb888数组的指针和一个指向u32 argb8888数组的指针。然后,我们使用循环遍历输入数组中的每个元素,并将每个元素的红色、绿色和蓝色分量提取出来。最后,我们使用这些分量构建一个u32 argb8888值,并将其存储在输出数组中。在构建argb8888值时,我们将alpha分量设置为0xFF,以确保每个像素都是完全不透明的。
相关问题
将uint8_t RGB888的数组转换为uint32_t ARGB8888的数组的示例代码
以下是将uint8_t RGB888的数组转换为uint32_t ARGB8888的数组的示例代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
// 假设有一个RGB888的数组
uint8_t rgb888[] = {255, 0, 0, 0, 255, 0, 0, 0, 255};
int size = sizeof(rgb888) / sizeof(rgb888[0]);
// 创建一个ARGB8888的数组
uint32_t argb8888[size / 3];
memset(argb8888, 0, sizeof(argb8888));
// 将RGB888的数组转换为ARGB8888的数组
for (int i = 0, j = 0; i < size; i += 3, j++) {
argb8888[j] = (0xFF << 24) | (rgb888[i] << 16) | (rgb888[i + 1] << 8) | (rgb888[i + 2]);
}
// 输出ARGB8888的数组
for (int i = 0; i < size / 3; i++) {
cout << hex << argb8888[i] << endl;
}
return 0;
}
```
该代码将RGB888的数组转换为ARGB8888的数组,并使用十六进制输出。
RGB888的数组变成ARBG8888的数组
将RGB888的每个元素的值复制到ARGB8888的第2、3、4个元素,然后将第1个元素的值设为255即可。具体代码实现如下:
```python
rgb_array = [0x12, 0x34, 0x56] # RGB888数组
argb_array = [0] * 4 # ARGB8888数组
argb_array[0] = 0xff # A值设为255
argb_array[1:4] = rgb_array # R、G、B值复制
print(argb_array) # [255, 18, 52, 86]
```
这样就将RGB888的数组变成了ARGB8888的数组,其中A值为255,R、G、B值与原数组相同。
阅读全文