Android替代java.awt(BuffereImage和Raster)
在我最后一年的项目中,我正在开发一个android应用程序,它可以捕捉树叶的图像,并识别它来自什么类型的树。我有一个几乎完成的PC版本(用java开发),我正在开始将其移植到android。虽然Android替代java.awt(BuffereImage和Raster),java,android,awt,bufferedimage,raster,Java,Android,Awt,Bufferedimage,Raster,在我最后一年的项目中,我正在开发一个android应用程序,它可以捕捉树叶的图像,并识别它来自什么类型的树。我有一个几乎完成的PC版本(用java开发),我正在开始将其移植到android。虽然BufferedImage和光栅构成了我程序的关键部分,但这是一个问题,因为android中缺少java.awt,因此这意味着我必须更改库 我正在使用一个由我的讲师开发的库,下面的方法使用光栅将BuffereImage转换为一个Neigage(在整个包中使用的一种类型) 我基本上是在问,除了java.aw
BufferedImage
和光栅构成了我程序的关键部分,但这是一个问题,因为android中缺少java.awt
,因此这意味着我必须更改库
我正在使用一个由我的讲师开发的库,下面的方法使用光栅将BuffereImage转换为一个Neigage(在整个包中使用的一种类型)
我基本上是在问,除了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
publicstaticint[]readAsInts(字符串文件名)引发IOException{
int[][]像素;
System.out.println(“文件:”+文件名);
String[]types=ImageIO.getReaderFile后缀();
for(int l=0;l
谢谢大家
编辑:对于任何不知道光栅存储BuffereImage的像素值以及带数(红色、绿色、蓝色、alpha)的人,此算法将像素值存储在2d数组(像素)中。听起来您只是想使用位图,并能够在数组中操纵像素本身。这门课和它的方法一起浮现在我的脑海里。但请记住,移动设备上的内存要少得多。在处理大型位图时,很容易遇到内存不足的问题 另一条路线是使用NDK。我在这方面没有太多经验,但是
AndroidBitmap\u lockPixels
和AndroidBitmap\u lockPixels
可能是一个很好的起点
最后,另一个应该表现良好的选项是使用
如果您只想将图像加载到
int
数组中,Bitmap.getPixels
应该足够了。您可以将buffereImage
转换为PNG或JPEG,然后通过HTTP将其发送到安卓,安卓可以将PNG或JPEG转换回Bitmap
并使用它。
当Android需要发送任何图像时,通过网络将其发送为PNG或JPEG,然后将PNG转换为