2011-12-21 13 views
1

この質問は私の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(); 
} 

コードは非常に単純ですが、私は、なぜ最初の行のみがファイルに書き込まれますことを理解しません。

更新日:: MerlinとDeepakが正しいです。私は今、異なる名前をつけてみました。すべての部分が別々のファイルに書き込まれました。今問題を知っている、私は2番目のチャンクからヘッダーを削除し、最初のチャンクか何かからeofを削除する必要がありますか?

+0

ファイルに最初の行だけがあることをどのように確認しましたか? – Deepak

答えて

3

私は非常に非効率なので、なぜ地球上でこれをやっているのか尋ねる衝動に抵抗するつもりですので、見てみましょう。

一度に1行のピクセルを書きますが、appendフラグをtrueに設定して同じファイルに繰り返し書き込みます。

あなたが書き留めているビットマップを書き込むときは、自己完結しているという事実があります。そのため、最初の行を読み込んでいるプログラムは、それがビットマップ全体であることを期待しています。

これは、テキストファイルにEOFマーカーを付けることと同じです。すべての行が書かれているが、読むときには、読者はあなたが圧縮されたファイルに(.PNG)を追加しているので

+0

Thanx、あなたの答えは私の前の質問についての私の質問でリンクを与えたので、最初の行のためにかなりokと思われます。問題は、いくつかの画像フィルタリングをしたいのですが、私はオフアレイが私にOOMEを与えるint配列の画像を変換する必要があるので、私は行内の画像を分割し、フィルタを適用してファイルに保存することを考えました/オブジェクト)。いくつかのロジックを持つファイルから読み込んでImageViewに追加してください。私には少なくともatleast ..になります:) – Farhan

+0

@farhan私は本当に標準のAPIを使用してこの1つを把握することはできません。 bitmapfactoryを使用してビットマップの小さな部分を簡単に読み取ることはできますが、ビットマップのセグメントを書き込むことはできません。あなたが探しているものを行う専門のライブラリを探す必要があるかもしれません。例えばlibPNG – Merlin

+0

あなたはsdkのlibPNGの代替手段を持っていないと言っています...私は自分のロジックを変えるべきですか?私はImageBytesで作業を始めようと考えていました。 – Farhan

1

を何が起こっているか、より完全に理解するためにthe structure of a PNG fileを研究する必要がある最初のEOF

後にあきらめます1つ目は、最初の行である最初のビットのエンコードされたデータだけを表示します。これは、符号化されたイメージヘッダが符号化されたコンテンツを構成するバイト数を有し、デコーダが、終了マーカの後のファイルの残りのデータについて気にしないので、論理的でもある。

私はファイルを開いたときに、変更されていない最初のイメージを見たときに、.pngファイルを別のファイルの最後にコピーしようとしました!

+0

+1。あなたは正しいですが、私は今何をすべきですか? – Farhan

+1

@farhan私はMerlinに同意します。あなたが求めているのは、特別なライブラリが必要な部分的なエンコーダです。 – Deepak

0

各行をファイルにpngとして追加できないため、ロジックが間違っています。おそらくそれはいくつかのヘッダーを持っているので、それぞれが追加された後に追加されるでしょう。

+0

必ずしも新しいFileOutputStreamの第2引数には – njzk2

+1

が追加されています。申し訳ありません。 – Caner

関連する問題