我正在参与一个项目,在那里我们构建了一个解决Rubiks立方体的应用程序。最初我们使用JavaFX开始使用桌面应用程序,但我们决定切换到Android应用程序。
由于我已经实现了一个至少用于颜色识别的工作模型,我想重用它并只围绕它构建另一个UI。这就是我现在被困住的地方,因为我甚至无法让Android的位图API工作。不幸的是,由于Swing / AWT / JavaFX图像库不可用,我看起来需要坚持使用它。
所以我实现了一个JUnit测试,我清理了一下:
package de.uniks.rubiksapp;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
@RunWith(RobolectricTestRunner.class)
public class TestBitmap {
@Test
public void testBitmap() {
Resources resources = RuntimeEnvironment.application.getResources();
InputStream testImageStream = resources.openRawResource(R.drawable.test_front);
Bitmap testImageBitmap = BitmapFactory.decodeStream(testImageStream);
//Bitmap testImageBitmap = BitmapFactory.decodeResource(resources, R.drawable.test_front);
// --- Pixel readout would be here --- //
System.out.println(testImageBitmap.getWidth() + "x" + testImageBitmap.getHeight() + "px");
FileOutputStream out = null;
try {
out = new FileOutputStream("test.png");
testImageBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
我目前的问题是我从BitmapFactory
获得的位图似乎已损坏。当我尝试使用Bitmap.getPixel()
读取特定像素时,它们始终是黑色的。所以我尝试将图像保存回磁盘,但是生成的文件只有大约40个字节,无法打开。
最初,我尝试使用Bitmap.decodeResource()
代替Bitmap.decodeStream()
,但总是会返回大小为100x100px的图片,尽管我的源图片大小为1240x800px。即使我使用Bitmap.Options
并设置inScaled = false
。使用Bitmap.decodeStream()
时,至少大小正确。
感谢您的帮助!