c 切割任意n*m块的通用方法

发布时间:2024年01月02日

思路:只需知道要提取块左上角的坐标,再水平读取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;
}

? ? ? ? ??

?

文章来源:https://blog.csdn.net/m0_59802969/article/details/135339057
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。