gpt4 book ai didi

java - java.awt 的 Android 替代品(BufferedImage 和 Raster)

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:16:29 26 4
gpt4 key购买 nike

我正在为我的最后一年项目开发一个 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 的像素值以及波段数(红色、绿色、蓝色、alpha)的任何人,因此该算法采用像素值并将它们存储在二维数组(像素)。

最佳答案

听起来您只想使用位图并能够操纵数组中的像素本身。 Bitmap类与其 getPixels 一起浮现在脑海中方法。请记住,您在移动设备上的内存要有限得多。在处理大型位图时很容易遇到内存不足的问题。

另一种方法是使用 NDK。我在这方面经验不多,但 AndroidBitmap_lockPixelsAndroidBitmap_unlockPixels 可能是一个不错的起点。

最后,另一个应该表现良好的选项是使用 RenderScript .

如果您只想将图像加载到 int 数组中,Bitmap.getPixels 就足够了。

关于java - java.awt 的 Android 替代品(BufferedImage 和 Raster),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21921782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com