0.1 JNA是什么
JNA(JavaNativeAccess)框架是一个开源的Java框架,是SUN公司主导开发的,建立在
经典的JNI的基础之上的一个框架。
JNA项目地址:https://jna.dev.java.net/
JNA使Java调用原生函数就像.NET上的P/Invoke一样方便、快捷。
JNA的功能和P/Invoke类似,但编写方法与P/Invoke截然不同迅裤激。JNA没有使用Annotation,
而是通过编写一般的Java代码来实现。
P/Invoke是.NET平台的机制。而JNA是Java平台上的一个开源类库,和其他类库没有
什么区别。只需要在classpath下加入jna.jar包,就可以使用JNA。
JNA使Java平台可以方便地调用原生函数,这大大扩展了Java平台的整合能力。
0.2 加入
在eclipse 中将文章最后的JNA下载中的zip解压放到一个记得住的文件夹然后在工程的JAVA Build Path中加入这两个jar即可
1 使用步纯庆骤
1.1 编写DLL
这里我们使用 code::blocks编写dll
首先新建一个DLL工程
建立完毕后我们可以看到这样的结构
其中有一个h文件和一个cpp文件
依葫亩袜芦画瓢 改写这两个文件就可以了,我们写两个函数,一个加一个阶乘
main.h 改写成
[cpp] view plain copy
#ifndef __MAIN_H__
#define __MAIN_H__
#include <windows.h>
/* To use this exported function of dll, include this header
* in your project.
*/
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
#ifdef __cplusplus
extern "C"
{
#endif
int add(int a,int b)
int factorial(int n)
#ifdef __cplusplus
}
#endif
#endif // __MAIN_H__
main.cpp改写成
[cpp] view plain copy
#include "main.h"
int add(int a,int b){
return a + b
}
int factorial(int n){
int i
int r = 1
for(i=1i<n+1i++)
r = r*i
return r
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
// attach to process
// return FALSE to fail DLL load
break
case DLL_PROCESS_DETACH:
// detach from process
break
case DLL_THREAD_ATTACH:
// attach to thread
break
case DLL_THREAD_DETACH:
// detach from thread
break
}
return TRUE// succesful
}
其中DLLMain是动态链接库的入口函数我们不用管它,点击编译按钮
这样就生成了DLL文件了,我们在项目文件夹 bin文件夹下的Debug中可以找到编译成了DLL文件,将这个文件拷贝到需要使用DLL的JAVA工程路径下
一、ImageMagick介绍ImageMagick是用C语言开发图片处理程序。可以对图片进行改变大小、旋转、锐化、减色或增加特效等 *** 作虚世。对图片的 *** 作,即可以通过命令行进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来亏誉闷完成。
ImageMagick 的官网是:http:// www.imagemagick.org/script/index.php
由于我们是java项目,直接使用java通过JNI技术调用ImageMagick是不行的。因为ImageMagick开发时没有使用java JNI生成的头文件。
可以使用jmagick解决,jmagick是由c语言开发的,开发时使用了java JNI生成的头文件,所以java可以通过JNI技术调用jmagick。jmagick再调用ImageMagick。这们我们处理图片使用的是jmagick暴露的java接口。
也可以使用JNA来调用ImageMagick,JNA全称是Java Native Access,JNA是在JNI的基础上完善的,方便的我们开发的。JNA项目主页是https://github.com/twall/jna。使用JNA来销弯调用ImageMagick就须要直接 *** 作ImageMagick提供的C接口(API)。
二、在Linux上用源码安装ImageMagick与jmagick
我们使用jmagick,在ImageMagick官网首页左侧菜单的Program Interfaces菜单中找到jmagick。进入jmagick的主页。
我们使用6.4版本,下载地下是:
http:// d ownloads.jmagick.org/6.4.0/
我们下载:
ImageMagick-6.4.0-0.tar.gz
jmagick-6.4.0-src.tar.gz
文档在:
http:// downloads.jmagick.org/jmagick-doc/
-----------------------------------------------------------
解压ImageMagick,查看ImageMagick的安装说明文件Install-unix.txt就知道怎么安装ImageMagick了。
解压jmagick,查看jmagick的安装说明文件INSTALL就知道怎么安装jmagick了。
-----------------------------------------------------------
安装ImageMagick
修改文件执行权限:chmod -R 755 文件名
tar zvxf ImageMagick-6.4.0-0.tar.gz
cd ImageMagick-6.4.0-0
./configure --prefix=/opt360/ImageMagick-6.4.0 --with-quantum-depth=8
make
make install
--卸载:make uninstall
关于Q8,Q16,Q32的说明:
Q8表示: 8-bits per pixel quantum
Q16表示:16-bits per pixel quantum
在 Install-unix.txt文件中的解释说明,避免翻译的不好误导大家,请大家自己去看原文吧。大意是:大多数电脑显示使用8-bit per pixel quantums。使用16-bit per pixel quantums在处理图片时比8-bit慢15%至50%,并须要更多的内存。
处理一张1024x768像素的图片8-bit要使用3M内存,16-bit要使用8M内存。
8-bit可表示0-255种值,16-bit可表示0-65535种值。
默认值是8-bit.
-----------------------------------------------------------
安装jmagick
修改文件执行权限:chmod -R 755 文件名
tar zvxf jmagick-6.4.0-src.tar.gz
cd jmagick-6.4.0-src
./configure --prefix=/opt360/jmagick-6.4.0 --with-java-home=/home/jdk/jdk1.6.0_12 -with-magick-home=/opt360/ImageMagick-6.4.0
make all
make install
下面几步测试可以不执行
make simpletest 因没有Junit的jar包报2个错误,不用管。
make test
make javadoc
安装成功后,在/opt360/jmagick-6.4.0/lib/有一个jmagick-6.4.0.jar文件,在你的java项目中就使用这个jar文件处理图片。
记住jmagick-6.4.0.jar是使用前面你指定的jdk1.6编译出来的,所以不能在jdk为1.5的环境下使用jmagick-6.4.0.jar。
如果你执行了make javadoc,在/opt360/jmagick-6.4.0/share/doc目录下就有文档。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)