19,468
社区成员
发帖
与我相关
我的任务
分享
// 纯位图数据 3686400=0x384000/0x1E00=0x1E0=480 hei
// 1280(Pix) + 640(Pad)=1920(pixels); *4(ARGB)=0x1E00
// width*hei = 1280*480
#define W 1280
#define H 480
void LoadBigStride()
{
CFile ifile;
ifile.Open("纯位图数据",CFile::modeRead);
CFile ofile;
ofile.Open("位图数据.bmp",CFile::modeCreate | CFile::modeWrite);
//
BITMAPFILEHEADER bmfHdr; //位图文件头结构
// 设置位图文件头
bmfHdr.bfType = 0x4D42; // "BM"
DWORD dwDIBSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+W*H*4;
bmfHdr.bfSize = dwDIBSize;
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER)+(DWORD)sizeof(BITMAPINFOHEADER);
// 写入位图文件头
ofile.Write((LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER));
// 设置位图信息头结构
BITMAPINFOHEADER bi;//位图信息头结构
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = W;
bi.biHeight = H;
bi.biPlanes = 1;
bi.biBitCount = 32;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;// bmfHdr.bfOffBits + 1280*640*4;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
//写入位图信息头
ofile.Write((LPSTR)&bi, sizeof(BITMAPINFOHEADER));
// 写入 pixels
int hei=0;
char ibuffer[0x1E00];
while(ifile.Read(ibuffer,0x1E00))
{
ofile.Write(ibuffer,0x1400);
hei ++;
}
afxDump << hei << "\n";
ifile.Close();
ofile.Close();
}
height = 0x1E0= 480 !!!
void ProcessVideoImage(BYTE** pDestScanLine0,LONG lDestStride,BYTE** pSrcScanLine0,LONG lSrcStride,DWORD dwWidthInPixels,DWORD dwHeightInPixels)
{
for (DWORD y = 0; y < dwHeightInPixels; y++)
{
RGBQUAD* pSrcPixel = (RGBQUAD*) *pDestScanLine0;
RGBQUAD* pDestPixel = (RGBQUAD*) *pSrcScanLine0;
for (DWORD x = 0; x < dwWidthInPixels; x += 2)
{
pDestPixel[x] = pSrcPixel[x];
}
*pDestScanLine0 += lDestStride;
*pSrcScanLine0 += lSrcStride;
}
}
[/quote]
ProcessVideoImage(&Picture_data2, param.i_width * 4, &Picture_data, Picture_pitch, param.i_width, param.i_height);
参数是这样
void ProcessVideoImage(BYTE** pDestScanLine0,LONG lDestStride,BYTE** pSrcScanLine0,LONG lSrcStride,DWORD dwWidthInPixels,DWORD dwHeightInPixels)
{
for (DWORD y = 0; y < dwHeightInPixels; y++)
{
RGBQUAD* pSrcPixel = (RGBQUAD*) *pDestScanLine0;
RGBQUAD* pDestPixel = (RGBQUAD*) *pSrcScanLine0;
for (DWORD x = 0; x < dwWidthInPixels; x += 2)
{
pDestPixel[x] = pSrcPixel[x];
}
*pDestScanLine0 += lDestStride;
*pSrcScanLine0 += lSrcStride;
}
}