• 大小: 728KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: 其他
  • 标签: Jpg转YUV  BMP转YUV  

资源简介

可以将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

评论

共有 条评论

相关资源