这个问题与我的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还是什么?
答案 0 :(得分:3)
我会拒绝询问为什么你这样做的冲动,因为效率非常低,所以让我们来看看。
所以你一次写一行像素,但是你将它们重复写入同一个文件,并将append标志设置为true,这是正确的。
您错过的是,当您编写位图时,您正在编写的是自包含的。因此,读取第一行的程序将期望它是整个位图。
这相当于在文本文件中包含EOF标记。所有的行都是正在写的,但在阅读时,读者会在第一次EOF之后放弃
您需要研究the structure of a PNG file以更全面地了解正在发生的事情
答案 1 :(得分:1)
由于您要一个接一个地附加压缩文件(.png),打开结果文件只会显示第一位编码数据,这是您的第一行。这也是合乎逻辑的,因为编码图像头具有包含编码内容的字节数,并且解码器在结束标记之后不会打扰文件中的其余数据。
我只是尝试在另一个文件的末尾复制.png文件,当我打开文件时,我看到第一张图片没有改变!
答案 2 :(得分:1)
您的逻辑错误,因为您无法将每行作为png附加到文件中。可能它有一些标题内容,所以它们会在每次附加后附加。