讀yuv檔案的時候需要獲取yuv檔案的幀數,以便建立迴圈一幀一幀讀取,這時候要獲取yuv的幀數。
方法:首先用fopen函式開啟乙個yuv檔案,接著用fseek( fyuv, 0l, seek_end ),再接著用ftell來獲取檔案的大小size,由於用的是yuv420,因此用size/(width*height*1.5)即獲得了yuv檔案的總幀數。
需要注意的是:fseek函式已把指向yuv檔案的開始的指標改變了位置,即此時的指標已指向檔案的結尾處,由於接著要進行檔案的讀寫,這時候應該用rewind()函式把指標直接重新指到檔案開始處。
ps:獲得檔案大小的幾種方法
#include
<
iostream
>
#include
<
io.h
>
#include
<
sys/stat.h
>
#include
<
afx.h
>
#define
_afxdll
using
namespace
std;
void
main()
//方法三
cfile cfile;
if (cfile.open(filepath, cfile::moderead))
//方法四
handle handle
=createfile(filepath, file_read_ea, file_share_read,
0, open_existing, 0,
0 );
if(handle
!= invalid_handle_value)}
(1) configuration properties -> c/c++ -> code generation -> runtime library, 選擇"multi-threaded debug(/mtd)"
(2) configuration properties -> linker -> input -> ignore specific library, 輸入"msvcprtd.lib"
例子中,由於在工程開啟狀態下,test.ncb檔案無法開啟,所以方法
二、三無法獲取檔案大小,因此推薦使用方法
一、四。
另:檔案的隨機讀寫
前面介紹了對檔案的順序讀寫操作,這些操作都是從檔案的第乙個有效資料(或某個位置)開始的,依照資料在檔案儲存裝置中的先後次序進行讀寫,在讀寫過程中,檔案位置指標自動移動。但在實際應用中,往往需要對檔案中某個特定位置處的資料進行處理,換言之,就是讀完乙個位元組的內容後,並不一定要讀寫其後續的位元組資料,可能會強制性地將檔案位置指標移動到使用者所希望的特定位置,讀取該位置上的資料,這就是隨機讀寫檔案。
c語言提供了對檔案的隨機讀寫功能。在隨機方式下,系統並不按資料在檔案中的物理順序進行讀寫,而是可以讀取檔案任何有效位置上的資料,也可以將資料寫入到任意有效的位置。
c語言通過提供檔案定位函式來實現隨機讀寫功能。
1. 獲取檔案位置指標當前值的函式
ftell()
ftell()
函式的功能是獲得並返回檔案位置指標的當前值。
ftell()
函式的原型定義為:
long ftell(file * fp);
其中引數
fp是檔案型指標,指向當前操作的檔案。
rewind()
函式的返回值為檔案位置指標的當前位置。如果
rewind()
函式執行時出現錯誤,則返回長整型的
-1(即
-1l)。
2. 重置檔案位置指標的函式
rewind()
rewind()
函式的功能是使檔案的位置指標移到檔案的開頭處。
rewind()
函式的原型定義為:
void rewind(file * fp);
其中引數
fp是檔案型指標,指向當前操作的檔案。
rewind()
函式沒有返回值,其作用在於:如果要對檔案進行多次讀寫操作,可以在不關閉檔案的情況下,將檔案位置指標重新設定到檔案開頭,從而能夠重新讀寫此檔案。如果沒有
rewind()
函式,每次重新操作檔案之前,需要將該檔案關閉後再重新開啟,這種方式不僅效率低下,而且操作也不方便。使用
rewind()
函式便能克服這一缺陷。
【例
11.7
】
有乙個文字檔案
file1.dat
,兩次讀寫它的內容,第一次將它的內容顯示在螢幕上,第二次將它的內容複製到另乙個檔案
fiel2.dat
上。以下為實現該功能的程式**。
#include "stdio.h"
void main()
3. 移動檔案位置指標的函式
fseek()
函式fseek()
可以實現改變檔案位置指標到指定位置的操作。
fseek()
函式的原型定義為:
int fseek(file * fp,long offset,int origin);
即:int fseek(
檔案型別指標,位移量,起始點
);其中
fp為開啟的檔案指標,引數
offset
為檔案位置指標移動的位移量(單位為位元組),引數
origin
指示出檔案位置指標移動的起始點(或稱基點)位置。當執行
fseek()
函式後,檔案位置指標新的位置是以起始點為基準,向後(
offset
為正值)
/或向前(
offset
為負值)移動
offset
個位元組。檔案位置指標的新位置可以用公式「
origin+offset
」來計算得出。
二進位制檔案的基點
origin
可以取以下三個常量值之一:
⑴seek_set
(也可直接用數字
0表示):此時檔案位置指標從檔案的開始位置進行移動;
⑵seek_cup
(對應值為1)
: 此時檔案位置指標從檔案的當前位置進行移動;
⑶seek_end
(對應值為2)
: 此時檔案位置指標從檔案的結束位置進行移動。
文字檔案的基點
origin
只能取seek_set
常量值(或取
0值),而
origin
的值應為0。
fseek()
函式常用於二進位制檔案中,對於文字檔案則不常使用,因為文字檔案要進行字元的轉換,這會為檔案位置指標的計算帶來混亂。
fseek()
函式的呼叫形式為:
fseek()
函式返回乙個整形值。如果函式執行成功,返回
0值;否則,返回乙個非0值。
下面給出
fseek()
函式呼叫的兩個例子:
①fseek(fp,50l,1)
,將fp
指向的檔案的位置指標向後移動到離當前位置
50個位元組處;
②fseek(fp,-100l,2)
,將fp
指向的檔案的位置指標從檔案末尾處向前回退
100個位元組。
4. 應用例項
【例
11.8
】
在當前目錄下有一二進位制檔案
information.dat
,檔案中儲存有學生資訊資料。程式設計實現按指定位置讀取該檔案中的資料,顯示到螢幕上,並統計檔案的總位元組數目,也顯示到螢幕上。
以下為實現該功能的程式**。
#include "stdio.h"
struct student;/*
主函式*/
main()
;fp = fopen("information.dat","rb");
if(fp==null)
printf("record in file information.dat:/n");
for(i=1;i<5;i+=2)
getch();
}
Android 關於獲取攝像頭幀資料
第一部分 由於android下攝像頭預覽資料只能 imageformat.nv21 格式的,所以解碼時要經過一翻周折.camera mcamera camera.open camera.parameters p mcamera.getparameters p.setpreviewformat ima...
關於cookie獲取問題
後來發現由於我是在父頁面裡面開啟的table子標籤頁面document.cookie獲取的cookie裡面只包含path路徑為 的cookie值,然後在後台 需要加上setpath 設定cookie的path路徑為 問題解決 cookie取值注意問題,httponly打對號的為唯讀獲取不到,path...
關於recycleView高度獲取問題
1 computeverticalscrollextent 是當前螢幕顯示的區域高度 2 computeverticalscrolloffset 是當前螢幕之前滑過的距離 3 computeverticalscrollrange 是整個recycleview控制項的高度 4 recyclerview...