摘要:
一、概述 最近看到网上有人问怎么用C语言实现屏幕截图,刚好自己也在研究Linux驱动,于是花了半天时间把Linux的FrameBuffer驱动看懂了个七八,接着就动手写了个LCD屏幕截图的应用程序。 一些说明:1. 板子LCD的分辨率为480x272,像素格式为RGB565。2. 程序首先获取LCD的一些参数,然后将获取到的一帧数据转换为RGB24格式,最后用jpeglib库压缩为jpg格式的图片。 3. 在嵌入式Linux的板子上测试通过。二、实现 程序中有注释,不多说,直接上程序: 1 #include<stdio.h> 2 #include<stdlib.h> 3 阅读全文
摘要:
大部分摄像头的数据输出格式都是YUV格式,而YUV422是比较常见的一种。在Linux下通过摄像头获取图片数据并压缩为jpg格式的图片,使用libjpeg这个库,但貌似不能直接压缩YUV数据,需要经过一些转换,这里先将YUV转换为RGB格式再送给libjpeg进行压缩。 下面是YUV422转RGB24的代码: 1 int convert_yuv_to_rgb_pixel(int y, int u, int v) 2 { 3 unsigned int pixel32 = 0; 4 unsigned char *pixel = (unsigned char *... 阅读全文
摘要:
最近在研究FFmpeg,比较惊讶的是网上一大堆资料都是在说如何从已有的视频中截取一帧图像,却很少说到如何直接从摄像头中捕获一帧图像,其实我一直有个疑问,就是在Linux下,大家是用什么库来采集摄像头的(opencv?)?还是自己写v4l2的代码来实现?我之前一直都是用v4l2来采集摄像头的。经过一些时间的研究,最后成功地用FFmpeg实现了从摄像头采集一帧图像,实现代码也非常简单。不多说,上代码。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <f 阅读全文
摘要:
最近一个星期都在搞Linux下的一些开源项目,其实很早之前就有捣鼓过,这次再次遇到之前编译程序时遇到的一些问题,因此在这里做一下记录。一、在C++程序里要包含C语言写的程序的头文件时,在C++文件里应该这样来包含:extern "C"{#include "你的头文件"}注意:这里是大写的C。举个例子:在一个目录里有main.cpp hello.c hello.h三个文件,而main.cpp文件里要用到hello.c里的函数,那么在main.cpp里就要通过包含hello.h头文件来调用hello.c里的函数,因此在mian.cpp里应该这样写:exter 阅读全文
摘要:
之前用Android自带的人脸检测API玩弄了一下,但那是静态检测的,也就是说人为先给定一张图片然后让它来检测。今天想起之前看到过有一个开源的JavaCV项目,并且它自带了一些例程,刚好有一个也是关于人脸检测的,于是想试试效果怎样,顺便记录一下怎么使用这些库,下面是这个库的使用方法。 新建一个工程,在工程的根目录下新建文件夹libs,在libs下再新建文件夹armeabi,将javacv-bin下的javacpp.jar和javacv.jar复制到libs目录下,将解压后的javacv-android-arm.jar的内容复制到armeabi目录下,将OpenCV-2.3.1-and... 阅读全文
摘要:
一、概述 JNI编程和Linux上的C/C++编程还是挺相似的,每次java调用JNI中的函数时都会传入有关JVM的一些参数(如JNIEnv,jobject),每次JNI回调java中的方法时都要通过JVM的有关参数来实现,当在JNI中涉及到多线程的话还是有一些不一样的地方,就是要在子线程函数里使用AttachCurrentThread()和DetachCurrentThread()这两个函数,在这两个函数之间加入回调java方法所需要的代码。二、要求 掌握JNI多线程编程的方法。三、实现 新建工程MyThread,修改main.xml文件,在里面只有一个Button,如下: 1 <?. 阅读全文
摘要:
不知不觉,真正开始学习Android已经整整一个月了,翻开2010年6月份买的那本Java书,才发现自己接触Android快两年了,当时真的是零Java基础,几乎只有C语言基础,而C++也只是懂一点皮毛,或者可以说在没有面向对象编程的基础上去学习Android,那时也只是照着书上跑了几个例程之后就再也没怎么去学它了。 当时之所以想学习Android,一个很重要的原因是Android是基于Linux内核的,而且它是开源的,这跟我学习嵌入式Linux的方向一致。今天,看到Android发展得越来越来强大,再一次坚定我了学习它的信心。在这个月里我边学习Java边学习Android,我几乎坚... 阅读全文
摘要:
一、概述 对于大部分应用开发者来说可能都不怎么接触到NDK,但如果涉及到硬件操作的话就不得不使用NDK了。使用NDK还有另一个原因,就是C/C++的效率比较高,因此我们可以把一些耗时的操作放在NDK中实现。 关于java与c/c++的互相调用,网上有一大堆的文章介绍。但仔细观察可以发现,基本都是讲在java中调用一个本地方法,然后由该本地方法直接返回一个参数给java(例如,在java中定义的本地方法为private int callJNI(int i))。但在大多数时候要求的并不是由开发者在java层主动去调JNI中的函数来返回想要的数据,而是由JNI主动去调java中的函数。举个最... 阅读全文
摘要:
一、概述 ScaleGestureDetector这个类是专门用来检测两个手指在屏幕上做缩放的手势用的,最简单的应用就是用来缩放图片或者缩放网页。二、要求 利用ScaleGestureDetector这个类实现图片缩放。三、实现 新建工程MyScale,修改main.xml文件,在里面添加一个Button和一个SurfaceView,如下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android 阅读全文
摘要:
一、概述 URL,说白了就是一个网络地址(网址),通常一个网址里包含很多内容,这里要讲的不是如何从一个包括很多内容(比如很多图片)的网址里找到自己感兴趣的内容(比如说某一张图片),而是从一个带有图片格式(.jpg、.png、.bmp等)后缀的网址里获取该图片,也就是说该网址里只有一张图片。二、要求 从指定的网址里获取图片并显示出来。三、实现 新建工程MyURL,修改main.xml文件,在里面添加一个ImageView,如下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayou 阅读全文