XYZRGB型PCD文件中rgb字段的加包与拆包

XYZRGB型PCD文件中rgb字段的加包与拆包
 #include<iostream>
using namespace std;
void main()
{
	//--------------PCD文件RGB字段的拆包和加包------------
	//加包(已知RGB,求float)
	int r=109,g=114,b=134;
	int rgb = ((int)r << 16 | (int)g << 8 | (int)b); 
	float frgb = *reinterpret_cast<float*>(&rgb); 


	cout<<"frgb="<<frgb<<endl
		<<"rgb="<<rgb<<endl
		<<"r="<<r<<endl
		<<"g="<<g<<endl
		<<"b="<<b<<endl;
	//拆包(已知float,求RGB)
	int nrgb = *reinterpret_cast<int*>(&frgb); 
	int nr = (nrgb >> 16) & 0x0000ff; 
	int ng = (nrgb >> 8) & 0x0000ff; 
    int nb = (nrgb) & 0x0000ff; 

	cout<<"frgb="<<frgb<<endl
		<<"nrgb="<<rgb<<endl
		<<"nr="<<r<<endl
		<<"ng="<<g<<endl
		<<"nb="<<b<<endl;
}

 

XYZRGB型的PCD文件数据格式为

X                Y                   Z                   rgb

前三个都好说,最后一个rgb是用一个float来表示的,原本存储三个颜色信息的数值用一个数据来表示,明显是用到了位储存,所以考虑位操作。做了一个简单的VC程序,不做多的解释。

 

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值