linux下怎么用c语言获取一帧屏幕图像数据,怎么分块
1.利用FrameBuffer设备,用ioctl()函数获取相关屏幕信息,然后用mmap()映射,用两个for循环逐个读取for(y=0;y<scrinfo.yres;y...
1. 利用FrameBuffer设备,用ioctl()函数获取相关屏幕信息,然后用mmap()映射,用两个for循环逐个读取
for (y = 0; y < scrinfo.yres; y++)
for (x = 0; x < scrinfo.xres; x++)
获取一帧屏幕图像数据有没有更简洁方便的方法?
2. 把屏幕图像分成4×4或16×16的块。关于这方面的网上的都是一带而过,没说具体怎么分块,怎么保存像素数据。最近在学习linux下的桌面共享,求大神指点,急 展开
for (y = 0; y < scrinfo.yres; y++)
for (x = 0; x < scrinfo.xres; x++)
获取一帧屏幕图像数据有没有更简洁方便的方法?
2. 把屏幕图像分成4×4或16×16的块。关于这方面的网上的都是一带而过,没说具体怎么分块,怎么保存像素数据。最近在学习linux下的桌面共享,求大神指点,急 展开
2个回答
展开全部
教你一个方法,你想找某个方面的资源,就在关键词后面加详解两个字,通常都能搜到。例如搜
FrameBuffer详解
就能得到你要的东西了。
至于图像分块嘛,自己用memcpy把buffer里的图像拷贝出来,自己手动写循环分块啦。分4块那就拷贝到4个内存块里啦,写的时候注意循环的下标就行了。
FrameBuffer详解
就能得到你要的东西了。
至于图像分块嘛,自己用memcpy把buffer里的图像拷贝出来,自己手动写循环分块啦。分4块那就拷贝到4个内存块里啦,写的时候注意循环的下标就行了。
更多追问追答
追问
FrameBuffer了解得还行,主要是怎么分块存储像素数据(包括块号标记),还要考虑屏幕宽和高能不能被16整除,看了一些资料有点儿头绪但还是比较乱,如果这里解决了下面就比较容易进行了。可否再指点一下?
追答
struct buffer_block{
int block_id; //存块id
char* data; //存储数据
int width;
int height;
};
height = scrinfo.yres/4
width = scrinfo.xres/4
先计算得width和height,再分配空间
data = malloc(width*height*4);
然后把framebuffer的数据复制到data中
一共复制16次,得到16个buffer_block。
要分16块的话,屏幕宽和高能被4整除就行了,不是被16整除。如果不能被4整除,那么就取最邻近的值。比如图像是 400x250,那么你可以在图像的边缘添加像素,添加成400x256像素的图像。
展开全部
如果已经映射了的话,理论上应该是直接可以memcpy的,这个方法你可以尝试一下
图像分块其实很简单,帧数据说白了就是一个很大的数组,你可以理解为二维数组
对二维数组进行切分很简单吧。
更多追问追答
追问
追答
上面的这段代码我表示不知道是什么语言,即像c语言,但是如果按c的语法来判断完全都是些错误的代码所以不做评论,划分数据块可以通过结构体来实现例如
struct Chunk_data
{
int flag; //读写标志
int frame_num; //块号
char frame_data[16*16];//块大小
}chunk_data;
比较两块数据,有很多种方法你可以直接调用strcmp也可以自己构建一个,但是效率如何还是要自己去尝试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询