思路:只需知道要提取块左上角的坐标,再水平读取m列,垂直读取n行
下面程序是读取4×4的块,并存储在数组中,如读取8×8块原理一样
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/videodev2.h> //v4l2 头文件
#include <string.h>
#include <sys/mman.h>
#include <linux/fb.h>
#include <math.h>
#define PI 3.1415926
int main(void){
unsigned char i[64]={0,1,2,3,4,5,6,7,
8,9,10,11,12,13,14,15,
16,17,18,19,20,21,22,23,
24,25,26,27,28,29,30,31,
32,33,34,35,36,37,38,39,
40,41,42,43,44,45,46,47,
48,49,50,51,52,53,54,55,
56,57,58,59,60,61,62,63};
int p=0; //输出数组序号
char o[4][16]; //输出数组
for(int y=0;y<8;y=y+4){ //提取左上角点的垂直数据
for(int x=0;x<8;x=x+4){ //提取左上角点的水平数据
int n=0; //每一个数组下标取值 0-15
for(int a=0;a<4;a++){
for(int b=0;b<4;b++){
o[p][n]=i[8*(a+y)+(b+x)];
n++;
}
}
p++;
}
}
//-----显示验证-----------
for(int k=0;k<4;k++){
for(int a=0;a<16;a++){
printf("%d ,",o[k][a]);
}
puts("");
}
return 0;
}
? ? ? ? ??
?