S3c2440 保存位图没数据,大侠们帮帮忙啊
[复制链接]
S3c2440 想把相机0v9655采进来的图像保存为BMP格式的,我的代码如下,但就是不成功啊,大侠们帮帮忙啊
typedef struct {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BMPFILEHEADER_T;
struct BMPFILEHEADER_S{
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
};
typedef struct{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BMPINFOHEADER_T;
struct RGB{
BYTE b;
BYTE g;
BYTE r;
}pRGB[180][240]; // 定义位图数据
typedef struct PINGPONG_PR
{
unsigned int rgb_address;
unsigned char flag;
} PINGPONG_PR;
struct PINGPONG_PR bTemp;
void CMyCameraTestDlg::OnPic()
{
// TODO: Add your control notification handler code here
int iSize=240*180;
int X_H,Y_V;
int i,j;
int width,height;
width=240;height=180;
struct RGB temp;
memset( pRGB, 0, sizeof(pRGB) ); // 设置背景为黑色
if (!DeviceIoControl
(m_hled,
CAM_IOCTL_SAMSUNG_CAM_PR, //根据具体的设备有相关的定义
NULL, //没有向设备传递的数据,置为NULL
0, //没有向设备传递的数据,置为NULL
&bTemp, //读取设备的数据返回地址
sizeof(PINGPONG_PR *), //读取数据的字节数
NULL,
NULL)
)
{ AfxMessageBox(_T("拍照失败!"));
}
//GetPixelFormat()和SetPixelFormat() RGB16转RGB24
for(Y_V=0;Y_V<180;Y_V++)
{
for(X_H=0;X_H<240;X_H++)
{
pRGB[Y_V][X_H].r = (((*(BYTE *)(bTemp.rgb_address+Y_V*240+X_H*2+1))>>3)&0Xf8) * 255 / 63;
pRGB[Y_V][X_H].g = ((*(BYTE *)(bTemp.rgb_address+Y_V*240+X_H*2+1)<<3)&0x38+((*(BYTE *)(bTemp.rgb_address+Y_V*240+X_H*2))>>5)&0x07)* 255 / 127;
pRGB[Y_V][X_H].b =((*(BYTE *)(bTemp.rgb_address+Y_V*240+X_H*2))& 0x1F)* 255 / 63;
}
}
//倒序
for(i=0;i<90;i++)
{ for(j=0;j<240;j++)
{
temp = pRGB[j];
pRGB[j] = pRGB[179-i][j];
pRGB[179-i][j] = temp;
}
}
// 位图第一部分,文件信息
BMPFILEHEADER_T bfh;
bfh.bfType = 0X4d42; //bm
bfh.bfSize =3* width*height // data size
+ sizeof( BMPFILEHEADER_T ) // first section size
+ sizeof( BMPINFOHEADER_T ) // second section size
;
bfh.bfReserved1 = 0; // reserved
bfh.bfReserved2 = 0; // reserved
bfh.bfOffBits = bfh.bfSize -3* width*height;
// 位图第二部分,数据信息
BMPINFOHEADER_T bih;
bih.biSize = sizeof(BMPINFOHEADER_T);
bih.biWidth = width;
bih.biHeight = height;
bih.biPlanes = 1;
bih.biBitCount = 24;
bih.biCompression = 0;
bih.biSizeImage = 3* width*height;
bih.biXPelsPerMeter = 0;
bih.biYPelsPerMeter = 0;
bih.biClrUsed = 0;
bih.biClrImportant = 0;
//保存文件
CFile file(_T("image.bmp"),CFile::modeCreate|CFile::modeReadWrite);
file.Write(&bfh,sizeof(BMPFILEHEADER_T));
file.Write(&bih,sizeof(BMPINFOHEADER_T));
file.Write(( BYTE*)pRGB,240*180*3);
file.Close();
}