繁体   English   中英

Android替代java.awt(BufferedImage和Raster)

[英]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_lockPixelsAndroidBitmap_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM