[英]Android alternative to java.awt (BufferedImage and Raster)
在我的最后一年项目中,我正在开发一个Android应用程序,该应用程序可以捕获叶子的图像并确定其来自的树的类型。 我有一个即将完成的PC版本(用Java开发),我正在开始将其移植到android的过程。 尽管BufferedImage
和Raster构成了程序的关键部分,但这是一个问题,因为android中缺少java.awt
,因此这意味着我必须更改库。
我正在使用由我的讲师开发的库,下面的方法使用Raster将BufferedImage转换为IntImage(在整个包中使用的类型)。
我基本上是问我可以使用java.awt
任何Android替代品吗?
这是代码:
public static int[][] readAsInts(String fileName) throws IOException {
int[][] pixels;
System.out.println("File: " + fileName);
String [] types = ImageIO.getReaderFileSuffixes();
for (int l = 0; l < types.length; l++) {
System.out.println("Type " + l + ": " + types[l]);
}
File f = new File(fileName);
BufferedImage bi;
bi = ImageIO.read(f);
int cols = bi.getWidth();
int rows = bi.getHeight();
System.err.println("Number of bands: " + bi.getRaster().getNumBands());
Raster rast = bi.getRaster();
pixels = new int[rows][cols];
for (int r = 0; r < rows; r++) {
rast.getSamples(0, r, cols, 1, 0, pixels[r]);
}
return pixels;
} // readAsInts
多谢你们!
编辑:对于任何不知道栅格的人,都将BufferedImage的像素值与波段(红色,绿色,蓝色,阿尔法)一起存储,因此该算法将像素值广告存储在2d数组中(像素)。
听起来就像您只想使用位图并能够操纵数组中的像素本身。 我想到了Bitmap
类及其getPixels
方法。 但是请记住,您在移动设备上的内存要有限得多。 使用大型位图时,很容易遇到内存不足的问题。
另一种方法是使用NDK。 我在这里没有太多经验,但是AndroidBitmap_lockPixels
和AndroidBitmap_unlockPixels
可能是一个不错的起点。
最后,另一个应该表现良好的选项是使用RenderScript 。
如果您只是想将图像加载到int
数组中,则Bitmap.getPixels
应该足够了。
您可以将BufferedImage
转换为PNG或JPEG,然后通过HTTP将其发送到Android,然后可以将PNG或JPEG转换回Bitmap
并使用它。 当Android需要发送任何图像时,请通过网络将其作为PNG或JPEG发送,然后将PNG转换为BufferedImage
并在程序中使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.