24位BMP文件分析
24位bmp文件不含调色板,为真彩色图像每24bits为⼀个像素
操作思路
将bmp文件分别生成yuv文件,进行后续的操作,方便对图像进行各种处理,此处转场使用了纵向的翻页处理,步骤是将转换好的yuv图像分别抽取一定比例的yuv参数,交错输入转场帧,本例中共10帧用来转场,每次提取前一张图1/10的像素,其余用后一张图的像素补全,输入最终的文件中
实际效果
实际代码
1)BMP转YUV
由之前YUV转RGB实验的代码改进获得YUV2RGB实验
bool BMP2YUV(int x_dim, int y_dim, void* bmp, void* y_out, void* u_out, void* v_out, int flip)
{
static int init_done = 0;
long i, j, size;
unsigned char* r, * g, * b;
unsigned char* y, * u, * v;
unsigned char* pu1, * pu2, * pv1, * pv2, * psu, * psv;
unsigned char* y_buffer, * u_buffer, * v_buffer;
unsigned char* sub_u_buf, * sub_v_buf;
if (init_done == 0)
{
InitLookupTable();
init_done = 1;
}
if ((x_dim % 2) || (y_dim % 2)) return 1;
size = x_dim * y_dim;
y_buffer = (unsigned char*)y_out;
sub_u_buf = (unsigned char*)u_out;
sub_v_buf = (unsigned char*)v_out;
u_buffer = (unsigned char*)malloc(size * sizeof(unsigned char));
v_buffer = (unsigned char*)malloc(size * sizeof(unsigned char));
if (!(u_buffer && v_buffer))
{
if (u_buffer) free(u_buffer);
if (v_buffer) free(v_buffer);
return false;
}
b = (unsigned char*)bmp;
y