Android的BitmapFactory返回损坏的图像

时间:2018-03-17 15:56:55

标签: java android bitmapfactory

我正在参与一个项目,在那里我们构建了一个解决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()时,至少大小正确。

感谢您的帮助!

0 个答案:

没有答案