将位图写入块中的文件android

时间:2011-12-21 14:53:13

标签: android file bitmap fileoutputstream

这个问题与我的previous question有关,但你不需要阅读它才能理解它。

现在我试图将位图转换为更小的部分,然后保存那些较小的部分。

我得到的问题是,只有第一部分会保存在文件中,其大小比完整图片大。以下是我正在使用的代码:

for (int i = 0; i < Image.getHeight(); i++)
{
    fout = new FileOutputStream(file, true);
    Bitmap temp = Bitmap.createBitmap(Image, 0, i,Image.getWidth(), 1);
    temp.compress(Bitmap.CompressFormat.PNG, 100, fout);
    fout.flush();
    fout.close();
}

代码非常简单,但我不明白为什么唯一的第一行会写入文件。

UPDATE :: Merlin和Deepak是对的。我现在尝试使用不同的名称,所有部分都成功写入不同的文件。现在你知道了这个问题,我应该从第二个块中删除头文件并从第一个块中删除eof还是什么?

3 个答案:

答案 0 :(得分:3)

我会拒绝询问为什么你这样做的冲动,因为效率非常低,所以让我们来看看。

所以你一次写一行像素,但是你将它们重复写入同一个文件,并将append标志设置为true,这是正确的。

您错过的是,当您编写位图时,您正在编写的是自包含的。因此,读取第一行的程序将期望它是整个位图。

这相当于在文本文件中包含EOF标记。所有的行都是正在写的,但在阅读时,读者会在第一次EOF之后放弃

您需要研究the structure of a PNG file以更全面地了解正在发生的事情

答案 1 :(得分:1)

由于您要一个接一个地附加压缩文件(.png),打开结果文件只会显示第一位编码数据,这是您的第一行。这也是合乎逻辑的,因为编码图像头具有包含编码内容的字节数,并且解码器在结束标记之后不会打扰文件中的其余数据。

我只是尝试在另一个文件的末尾复制.png文件,当我打开文件时,我看到第一张图片没有改变!

答案 2 :(得分:1)

您的逻辑错误,因为您无法将每行作为png附加到文件中。可能它有一些标题内容,所以它们会在每次附加后附加。