91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 770KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-13
  • 語言: 其他
  • 標簽:

資源簡介

學習流媒體技術需要熟悉各種文件格式,了解一些編解碼的算法,此程序演示了jpg圖片的編碼算法,算法流程相對簡單,希望能對初學者一些啟示和幫助。對各種圖片和音視頻文件格式感興趣的朋友,請進群:417099529,一起探討學習研究,進群時請介紹自己對流媒體哪些方面比較熟悉和擅長。

資源截圖

代碼片段和文件信息

#include?“StdAfx.h“
#include?“JEnc.h“


JEnc::JEnc(void)
{
}


JEnc::~JEnc(void)
{
}

//?bmFile:輸入文件
//?jpgFile:輸出文件
//?Q:質量
void?JEnc::Invoke(string?bmFile?string?jpgFile?long?Q)
{
FILE*?pFile;????????????//?輸入文件句柄
if?((pFile?=?fopen(bmFile.c_str()“rb“))?==?NULL)???//?打開文件
????{?
???????throw(“open?bmp?file?error.“);???
}

//?獲取jpeg編碼需要的bmp數據結構,jpeg要求數據緩沖區的高和寬為8或16的倍數(視采樣方式而定)
BMBUFINFO?bmBuffInfo?=?GetBMBuffSize(pFile);????
imgWidth?=?bmBuffInfo.imgWidth;?????//?圖像寬
imgHeight?=?bmBuffInfo.imgHeight;????//?圖像高
buffWidth?=?bmBuffInfo.buffWidth;????//?緩沖寬
buffHeight?=?bmBuffInfo.buffHeight;????//?緩沖高
size_t?buffSize?=?buffHeight?*?buffWidth?*?3;?//?緩沖長度,因為是24bits所以*3
BYTE*?bmData?=?new?BYTE[buffSize];????//?申請內存空間
GetBMData(pFile?bmData?bmBuffInfo);???//?獲取數據
fclose(pFile);?????????//?關閉文件

//=====================================
//?計算編碼需要的緩沖區,RGB信號需要別分別編碼,所以需要3個緩沖區,這里只是1:1:1所以是一樣大
size_t?yuvBuffSize?=?buffWidth?*?buffHeight;?
BYTE*?pYBuff?=?new?BYTE[yuvBuffSize];
BYTE*?pUBuff?=?new?BYTE[yuvBuffSize];
BYTE*?pVBuff?=?new?BYTE[yuvBuffSize];
//?將RGB信號轉換為YUV信號
BGR2YUV111(bmDatapYBuffpUBuffpVBuff);
//?將信號分割為8x8的塊
DivBuff(pYBuff?buffWidth?buffHeight?DCTSIZE?DCTSIZE?);??
DivBuff(pUBuff?buffWidth?buffHeight?DCTSIZE?DCTSIZE?);??
DivBuff(pVBuff?buffWidth?buffHeight?DCTSIZE?DCTSIZE?);??

SetQuantTable(std_Y_QTYQT?Q);?????????//?設置Y量化表
SetQuantTable(std_UV_QTUVQT?Q);????????//?設置UV量化表??
InitQTForAANDCT();????????????//?初始化AA&N需要的量化表
pVLITAB=VLI_TAB?+?2047;?????????????????????????????//?設置VLI_TAB的別名
BuildVLITable();????????????//?計算VLI表??

pOutFile?=?fopen(jpgFile.c_str()“wb“);

//?寫入各段
WriteSOI();??????????????
WriteAPP0();
WriteDQT();
WriteSOF();
WriteDHT();
WriteSOS();

//?計算Y/UV信號的交直分量的huffman表,這里使用標準的huffman表,并不是計算得出,缺點是文件略長,但是速度快
BuildSTDHuffTab(STD_DC_Y_NRCODESSTD_DC_Y_VALUESSTD_DC_Y_HT);
BuildSTDHuffTab(STD_AC_Y_NRCODESSTD_AC_Y_VALUESSTD_AC_Y_HT);
BuildSTDHuffTab(STD_DC_UV_NRCODESSTD_DC_UV_VALUESSTD_DC_UV_HT);
BuildSTDHuffTab(STD_AC_UV_NRCODESSTD_AC_UV_VALUESSTD_AC_UV_HT);

//?處理單元數據
ProcessData(pYBuffpUBuffpVBuff);??
WriteEOI();

fclose(pOutFile);
delete[]?bmData;
}
//?獲取BMP文件輸出緩沖區信息
BMBUFINFO?JEnc::GetBMBuffSize(FILE*?pFile)
{
BITMAPFILEHEADER?bmHead;???????//文件頭信息塊?
BITMAPINFOHEADER?bmInfo;???????//圖像描述信息塊
BMBUFINFO???bmBuffInfo;
UINT?colSize?=?0;
UINT?rowSize?=?0;

fseek(pFile0SEEK_SET);???????//將讀寫指針指向文件頭部
fread(&bmHeadsizeof(bmHead)1pFile);????//讀取文件頭信息塊
fread(&bmInfosizeof(bmInfo)1pFile);????//讀取位圖信息塊

//?計算填充后列數,jpeg編碼要求緩沖區的高和寬為8或16的倍數
if?(bmInfo.biWidth?%?8?==?0)
{
colSize?=?bmInfo.biWidth;
}
else
{
colSize?=?bmInfo.biWidth?+?8?-?(bmInfo.biWidth?%?8);
}

//?計算填充后行數
if?(bmInfo.biHeight?%?8?==?0)
{
rowSize?=?bmInfo.biHeight;
}
else
{
rowSize?=?bmInfo.biHeight?+?8?-?(bmInfo.biHeight?%?8);
}

bmBuffInfo.BitCount?=?24;

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2016-06-08?11:46??jpgEncoder\
?????目錄???????????0??2016-06-08?11:39??jpgEncoder\Debug\
?????文件???????67072??2016-06-08?11:43??jpgEncoder\Debug\jpgEncoder.exe
?????文件??????511312??2016-06-08?11:43??jpgEncoder\Debug\jpgEncoder.ilk
?????文件??????969728??2016-06-08?11:43??jpgEncoder\Debug\jpgEncoder.pdb
?????目錄???????????0??2016-06-08?11:46??jpgEncoder\jpgEncoder\
?????文件?????????897??2016-06-08?10:35??jpgEncoder\jpgEncoder.sln
?????文件???????17408??2016-06-08?11:46??jpgEncoder\jpgEncoder.suo
?????文件???????25498??2016-06-08?11:00??jpgEncoder\jpgEncoder\JEnc.cpp
?????文件????????1561??2016-06-08?11:43??jpgEncoder\jpgEncoder\JEnc.h
?????文件????????5758??2016-06-08?11:43??jpgEncoder\jpgEncoder\Jpeg.h
?????文件????????4617??2016-06-08?10:42??jpgEncoder\jpgEncoder\Jpegformat.h
?????文件?????????545??2016-06-08?11:45??jpgEncoder\jpgEncoder\jpgEncoder.cpp
?????文件????????4523??2016-06-08?11:08??jpgEncoder\jpgEncoder\jpgEncoder.vcxproj
?????文件????????1698??2016-06-08?10:42??jpgEncoder\jpgEncoder\jpgEncoder.vcxproj.filters
?????文件?????????143??2016-06-08?10:35??jpgEncoder\jpgEncoder\jpgEncoder.vcxproj.user
?????文件????????1736??2016-06-08?10:35??jpgEncoder\jpgEncoder\ReadMe.txt
?????文件?????????297??2016-06-08?10:35??jpgEncoder\jpgEncoder\stdafx.cpp
?????文件?????????320??2016-06-08?10:35??jpgEncoder\jpgEncoder\stdafx.h
?????文件?????????314??2016-06-08?10:35??jpgEncoder\jpgEncoder\targetver.h
?????文件??????597194??2016-06-08?09:52??jpgEncoder\jpgEncoder\test-hua.bmp

評論

共有 條評論

相關資源