资源简介
可以将BMP文件和JPG文件转换为YUV数据,可以将YUV数据写成文件,也可以直接在内存中进行操作
代码片段和文件信息
#include “stdafx.h“
#include “PicToYuv.h“
#include “globle.h“
unsigned char* bmp2yuv(FILE *input_file int &len)
{
unsigned char *yuv = NULL;
unsigned char *rgb = NULL;
int w h;
int i j;
unsigned int x y;
unsigned char *Y = NULL;
unsigned char *U = NULL;
unsigned char *V = NULL;
unsigned char tmp;
bmp_fileheader header;
bmp_infoheader info;
fread(&header sizeof(bmp_fileheader) 1 input_file);
fread(&info sizeof(bmp_infoheader) 1 input_file);
if (header.bfType != 0x4D42)
{//不是bmp文件
return NULL;
}
w = info.biWidth;
h = info.biHeight;
long imgSize = w * h;
len = imgSize + (imgSize >> 1);
rgb = (unsigned char*)malloc(imgSize * 6);
yuv = (unsigned char*)malloc(len);
fseek(input_file 54 SEEK_SET);
fread(rgb + w * h * 3 1 w * h * 3 input_file);
//调整顺序
for (i = h - 1 j = 0; i > 0; i-- j++)
{
memcpy(rgb + j * w * 3 rgb + w * h * 3 + i * w * 3 w * 3);
}
for (i = 0; i < w * h * 3; i+=3)
{
tmp = rgb[i];
rgb[i] = rgb[i + 2];
rgb[i + 2] = tmp;
}
Y = yuv;
U = yuv + w * h;
V = U + ((w * h) >> 2);
for (y = 0; y < h; y++)
{
for (x = 0; x < w; x++)
{
j = y * w + x;
i = j * 3;
Y[j] = (unsigned char)(DY(rgb[i] rgb[i + 1] rgb[i + 2]));
if (x % 2 == 1 && y % 2 == 1)
{
j = (w >> 1) * (y >> 1) + (x >> 1);
U[j] = (unsigned char)((DU(rgb[i] rgb[i + 1] rgb[i + 2]) +
DU(rgb[i - 3] rgb[i - 2] rgb[i - 1]) +
DU(rgb[i - w * 3] rgb[i + 1 - w * 3] rgb[i + 2 - w * 3]) +
DU(rgb[i - 3 - w * 3] rgb[i - 2 - w * 3] rgb[i - 1 - w * 3])) / 4);
V[j] = (unsigned char)((DV(rgb[i] rgb[i + 1] rgb[i + 2]) +
DV(rgb[i - 3] rgb[i - 2] rgb[i - 1]) +
DV(rgb[i - w * 3] rgb[i + 1 - w * 3] rgb[i + 2 - w * 3]) +
DV(rgb[i - 3 - w * 3] rgb[i - 2 - w * 3] rgb[i - 1 - w * 3])) / 4);
}
}
}
return yuv;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-04-21 11:24 Debug\
文件 36352 2016-04-21 11:10 Debug\Jpg2Yuv.exe
文件 240640 2016-04-21 11:24 Debug\JpgToYuv.exe
文件 387124 2016-04-21 11:24 Debug\JpgToYuv.ilk
文件 527360 2016-04-21 11:24 Debug\JpgToYuv.pdb
文件 196664 2002-11-12 04:11 Debug\bmp.bmp
文件 98304 2016-04-21 11:20 Debug\bmp.yuv
文件 12316 2016-04-20 16:36 Debug\jpg.jpg
文件 98305 2016-04-21 11:20 Debug\jpg.yuv
文件 890 2016-04-21 11:24 Jpg2Yuv.sln
目录 0 2016-04-21 11:24 JpgToYuv\
文件 1932 2016-04-21 11:24 JpgToYuv\BmpToYuv.cpp
目录 0 2016-04-21 11:25 JpgToYuv\Debug\
文件 5057 2016-04-21 11:18 JpgToYuv\JpgToYuv.cpp
文件 4877 2016-04-21 11:17 JpgToYuv\JpgToYuv.vcproj
文件 1411 2016-04-21 11:24 JpgToYuv\JpgToYuv.vcproj.wang-PC.wang.user
文件 264 2016-04-21 11:22 JpgToYuv\PicToYuv.h
文件 1189 2016-04-21 08:50 JpgToYuv\ReadMe.txt
文件 1902 2016-04-21 10:58 JpgToYuv\globle.h
目录 0 2016-04-21 08:52 JpgToYuv\libjpeg\
文件 1525 2015-09-09 16:09 JpgToYuv\libjpeg\jconfig.h
文件 15371 2015-09-09 16:09 JpgToYuv\libjpeg\jmorecfg.h
文件 50461 2015-09-09 16:09 JpgToYuv\libjpeg\jpeglib.h
文件 802504 2015-09-09 16:09 JpgToYuv\libjpeg\libjpeg.lib
文件 908 2016-04-21 11:19 JpgToYuv\main.cpp
文件 213 2016-04-21 08:50 JpgToYuv\stdafx.cpp
文件 233 2016-04-21 08:50 JpgToYuv\stdafx.h
文件 498 2016-04-21 08:50 JpgToYuv\targetver.h
- 上一篇:基于AT89C52单片机的光功率计的设计
- 下一篇:美赛专用模板
评论
共有 条评论