如何用C/ c++有效地编写拜耳Raw10数据
How to compose the Bayer Raw10 data by C/C++ effectively?
组成两个原始图像缓冲区:
- 拜耳原始数据,包括每像素10位;
- 一个原始缓冲区有4192x3104像素
- 只需添加相应的位数据
- 使用C/c++语言 Android手机平台
如何有效地组合两个原始缓冲区?
现在,我试着这样做:
- 从rawBuf1和rawBuf2读取8像素,因为我可以使用16位数组(
unsigned short pixelWord[5]
)与5个长度来存储它们(8X10位= 5x16位) - 我这样做:p0
unsigned short p0 = (unsigned short )((pixelWord1[0] & 0X03FF) +(pixelWord2[0] & 0X03FF))
等
像素数据以字节流的形式出现,存储在原始缓冲区
unsigned char rawBuf1[100], rawBuf2[100];
根据您的平台的端序,您可以尝试位字段,并让编译器找出如何访问像素
struct pixels0 {
unsigned long long p0 : 10;
unsigned long long p1 : 10;
unsigned long long p2 : 10;
unsigned long long p3 : 10;
unsigned long long p4 : 10;
unsigned long long p5 : 10;
};
struct pixels6 {
unsigned long long pad : 4;
unsigned long long p6 : 10;
unsigned long long p7 : 10;
};
你可以用
unsigned short p0 = ((struct pixels0*)&rawBuf1[0])->p0 + ((struct pixels0*)&rawBuf2[0])->p0;
/* ... */
unsigned short p5 = ((struct pixels0*)&rawBuf1[0])->p5 + ((struct pixels0*)&rawBuf2[0])->p5;
unsigned short p6 = ((struct pixels6*)&rawBuf1[7])->p6 + ((struct pixels6*)&rawBuf2[7])->p6;
unsigned short p7 = ((struct pixels6*)&rawBuf1[7])->p7 + ((struct pixels6*)&rawBuf2[7])->p;
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 如何用C/ c++有效地编写拜耳Raw10数据