为什么保存的png和打开的png

时间:2017-09-03 16:45:17

标签: android bitmap png

我试图在位图中隐藏一个小文件。我将ARGB的最低位设置为文件中的每个位(我为文件大小保留的位图的前几个像素)。

为了这个调试目的,我将编码的int []与解码的int []进行比较。每隔几百个字节就有一个不正确的位。

我通过Bitmap.compress方法保存图片,如此......

OutputStream out = getContentResolver().openOutputStream(fileUri);

picture.compress(Bitmap.CompressFormat.PNG,100,out);

然后,从图像中提取文件...

pic = MediaStore.Images.Media.getBitmap(this.getContentResolver(), fileUri);

pic.getPixels(intArr, 0, width, 0, 0, width, height);

我冒昧地检查了其中一个png,我确实使用argb8作为配置,使用tweakPNG,发现生成的文件中唯一的块是 IHDR:8位/样本,真彩色+ alpha,非隔行扫描 sBIT:RGBA8 IDAT IEND

PNG照片看起来不错,没有问题。

编辑:进度!

我将这个问题跟踪到了这个基本问题 Bitmap.setPixels与Bitmap.getpixels的功能不同。

以下代码显示convert2和converted2之间的细微差别。大约每百位1或2位。这对我来说似乎很震惊。这是一个机器人的错误吗?

    picture3 = Bitmap.createBitmap(picture1.getWidth(), picture1.getHeight(), Bitmap.Config.ARGB_8888);
    picture3.setPixels(converted,0,picture1.getWidth(),0,0,picture1.getWidth(), picture1.getHeight());
    int[] converted2 = new int[converted.length];
    picture3.getPixels(converted2,0,picture1.getWidth(),0,0,picture1.getWidth(), picture1.getHeight());

1 个答案:

答案 0 :(得分:0)

这与this thread中的问题相同。

我有一个简单的解决方案,只需增加和描述关闭A,R,G或B值,直到lsb(如果每个都正确)。显然这会导致更加扭曲的位图,但它似乎是我能想到的唯一解决方案。