|
怎样将RGB565的图像从120x160转换到176x144大小
[复制链接]
从dopoda S1的摄像头捕获的图像格式是 RGB565 120*160(DirectShow Filter中获取), 在H.263进行编码之前,要先转成YUV格式, 而QCIF的可用格式是固定的,不包含120x160格式,所以要把RGB565 从120x160转换至176x144,然后再转换成YUV进行编码。我是按以下方式转换的,
BYTE m_rgb565_176_144[176*144*2];
BYTE m_yuv_176_144[176*144 + 176*144/2];
PBYTE pData;
pSample->GetPointer(&pData);// 这里捕获到的数据就是RGB565格式的图像
length = pSample->GetActualDataLength(); // 这个变量是长度
// 下面的代码试图对RGB565进行裁剪,从120x160裁剪成176x144。
int offset_row_start = (160 - 144)/2;
int offset_column_start = (176 - 120); // rgb565, 每像素2个字节, 所以不用再除以2
int row_end = offset_row_start + 144;
int bytes_per_line = 120 * 2;
for(int i = 0, j = offset_row_start; j
{
BYTE *tgt_line = m_rgb565_176_144 + i * 176 + offset_column_start;
BYTE *src_line = pData + j * bytes_per_line;
memcpy(tgt_line, src_line, bytes_per_line);
}
// 裁剪后的数据直接发生到PC上的播放器上, 这里为了排除H.263编码和YUV转换产生错误,没有进行转换和编码就直接发生
SendVideoData((char *)m_rgb565_176_144, 176*144*2);
PC上接收到的数据直接用DDRAW,根本无法成像。 而不进行裁剪时, 成像是正常的, 麻烦高手帮忙,看看裁剪时出什么错了,不胜感激。
|
|