0

我在 Android 上做隐写术。我的代码如下:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.src);
    picw = mBitmap.getWidth();
    pich = mBitmap.getHeight();
    pix= new int[picw * pich];
    mBitmap.getPixels(pix, 0, picw, 0, 0, picw, pich);


try {               
       FileOutputStream fos = super.openFileOutput("dest.png", MODE_WORLD_READABLE);
       mBitmap.compress(CompressFormat.PNG, 100, fos);
       fos.flush();            
       fos.close();            


    }catch (Exception e) {       
      tv.setText(e.getMessage());
    } 

我的问题是,每当我使用该Bitmap.compress()方法保存源图像时,pix[0]压缩过程中值会发生变化,因此我无法提取原始数据。我怎样才能解决这个问题?

4

1 回答 1

0

这是因为 android 手机使用 alpha 预乘法来获得更好的 PNG 图像性能。几个月前我试图创建一个解决方法,但没有成功。据我所知,到目前为止,在 android 上还没有针对这种类型的隐写术的解决方案。

如果您想为 android 创建更好、更强大的隐写术,请使用结合 libjpeg 库和 NDK 的 JPEG 图像。还有一些在图像中使用小波的库也可以。

于 2013-05-30T17:36:44.413 回答