Android和Java的图像处理库

Android和Java的图像处理库,java,android,image,resize,Java,Android,Image,Resize,我目前正在从事一个小项目,该项目将加载一个URL中的图像,调整其大小,并使用指定的调色板将其颜色深度更改为仅16种颜色。对我来说,主要的问题是,我想要一个程序,我可以在安卓设备和台式计算机上使用。 你知道一个好的图像处理库可以在两个系统上运行吗 提前感谢。任何纯Java库都应该在这两种平台上工作。谷歌搜索“Java图像处理库”时产生了几个结果。由于移动设备上的内存和CPU有限,因此请尝试找到最轻的库,以满足您的需要 巴里 我不认为有一个库可以满足您的需要,原因是在非移动平台上,您将在Java中使

我目前正在从事一个小项目,该项目将加载一个URL中的图像,调整其大小,并使用指定的调色板将其颜色深度更改为仅16种颜色。对我来说,主要的问题是,我想要一个程序,我可以在安卓设备和台式计算机上使用。 你知道一个好的图像处理库可以在两个系统上运行吗


提前感谢。

任何纯Java库都应该在这两种平台上工作。谷歌搜索“Java图像处理库”时产生了几个结果。由于移动设备上的内存和CPU有限,因此请尝试找到最轻的库,以满足您的需要

巴里

我不认为有一个库可以满足您的需要,原因是在非移动平台上,您将在Java中使用的每个图形操作在某种程度上都将使用Java2D渲染管道。在Android上,这是不存在的

Android为图像处理提供了自己的图形管道,实际上简化了许多标准Java中更复杂的事情

尽管如此,看起来您发现了一个库(JJIL),它在这些差异的基础上充当抽象层,在这种情况下,我会有点担心性能,并在您自己的代码中进行一些测试,以查看与平台方法相比它的性能如何。例如,我看到JJIL的这句话:

允许将图像从Android位图转换为JJIL RgbImages

当我查看源代码时,它看起来像是图像数据被转换并存储在一个内部数组中;所有这些抽象层都将耗费CPU时间和内存,尤其是当移动设备上的图像由于更高分辨率的摄像头和高带宽连接而变得更大时

这可能不是什么大问题,但同样,您可能需要进行一些分析/测试/性能比较。

允许您使用不需要java.awt或任何Android类的现有C/C++库。例如,您可以轻松地将libpng编译为Android的共享库,然后编写一个JNI接口将图像从Java层传递到png库。同样,您还可以将libpng编译为桌面计算机的共享库,并从那里使用它

我最近写了一篇关于如何为Android编译开源库的文章。如果您浏览Android源代码,您会发现一些类通过jni使用图形库。我以前没有使用过skia,但由于Android的基本框架中有skia,所以要让它在你的应用程序/桌面程序中工作应该不会太困难


编写跨平台程序一直是移动开发者社区的一个积极兴趣领域,一些引擎(如)已经非常擅长编写跨平台程序。因此,您所尝试的绝对是可能的。

有几种工具:

  • ImageJ
  • 斐济
  • 伊米
  • BoofCV:

本页上的答案截至2014年2月的日期相当长。我正在搜索一个免费的Android图像处理库,我在这里找到了斯坦福大学的讲稿:

进一步调查后,我发现他们在课程材料中使用了。它有java接口(还有许多其他语言),但是库是C++中的本地编写的。他们说:

与谷歌、雅虎、微软等知名公司一起, 英特尔、IBM、索尼、本田、丰田等使用该库的公司有 许多初创公司,如应用心智公司、VideoSurf和Zeitera,都是 OpenCV的广泛使用


我很兴奋(!)能找到这个,期待着回家试一试。

嗨,巴里,谢谢你的回答。我已经在谷歌上搜索过了,但问题是大多数(如果不是全部的话)图像处理框架要么使用java.awt,要么使用Android类,因此它们彼此不兼容。唯一可以工作的框架是JJIL(),但是您必须为Android或Java桌面包含不同的库,这不适合独立的类库。我理解。对不起,我帮不上什么忙了。嗨,里亚德,谢谢你的回答。我知道独立图像处理框架的问题,性能下降不会是大问题,因为目标应用程序不需要非常快,图像也会非常小。在仔细研究了这些框架之后,我决定不使用抽象层,而是实现两个不同的类来进行图像转换。它们都将实现一个自定义接口,我在独立于设备的程序逻辑的构造函数中使用该接口。在我看来,这似乎是目前最好的解决方案,但它需要更多的工作。当然,您将问题标记为Java,但C/C++也是一个选项……嗨,Jim。这是一个好主意,也许我可以找到一个小的图形库,它可以读取JPG、PNG和GIF,并且适合我的需要。另一方面:J2SE版本应独立于平台,因此库应至少在Windows和Linux(包括Android)下编译。我想提供这些版本(包括测试)比编写J2SE和Android特定版本的图像处理要花费更多的时间。。。如果您真的关心可移植性,请坚持使用经过良好测试的libjpeg和libpng库。否则,如果您使用标准C/C++编写代码,那么在其他平台上编译相同的代码就不会有问题(不要使用MFC、AFX、pthread等,还要注意32位和64位ARCH之间的差异。)至于skia库,它们似乎也支持Windows、Linux和Mac平台。这三种平台都有。我并不关心libpng或libjpeg等标准库的可移植性,我关心的是交叉开发工具的设置和所需的测试,