1

私は通常、もっと正確な質問をするのが好きですが、この質問では始めるのに適した場所が見つかりませんでした.

C# で記述して、大きなカスタム テキスト チャンクを画像に追加し、これを JPEG または PNG を使用して保存しようとしています。Comments または UserComments タグの使用例はたくさんありますが、テキストが比較的短い場合に機能します。私の場合、潜在的に大きなテキストのチャンクを追加する必要があります。最大 256K としましょう。「カスタム チャンク」への参照を見つけましたが、完全なカスタム JPG または PNG エンコーダーを作成せずに C# からそれらを読み書きする方法についての適切な指針を見つけることができません。

4

3 に答える 3

1

JPGについてはよくわかりませんが、PNGはチャンク形式であるため、(適切に記述された)既存のデコーダーが無視するカスタムチャンクをファイルに簡単に追加できるはずです。このチャンクには、入れたいデータを含めることができます。

また、完全なPNGデコーダーを作成する必要はありません。カスタムチャンクを探して、読み取り/書き込みを行うだけです。

編集:JPEGはセグメント(2ページを参照)を使用してファイルを分離します。私の調査では、カスタムセグメントを追加する方法は見つかりませんでしたが、JPG0、JPG13、DHP、EXPなどの未使用の(デコーダーによってスキップされる)セグメントIDを使用することは可能です。データを複数のブロックに分割して、ストレージスペースを増やすこともできます(@BitBankで指摘されています)。

お役に立てれば!

于 2012-07-19T16:12:22.650 に答える
1

このライブラリを試すこともできます。これにより、すべての標準チャンク (3 つのテキスト チャンクを含む) を読み書きできます。ここの最後のサンプルでは、​​テキスト チャンクを作成します。

于 2012-07-21T03:11:04.487 に答える
0

最もシンプルで基本的なアイデア (「汚いハック」など) として、「完全なカスタム JPG または PNG エンコーダーを作成する」必要はありません。通常どおりに保存してから、ファイルを開き、「カスタムチャンク」に詰め込んで保存できます。

おそらく、チャンクを配置できるオフセットを知るためにいくつかのJPG / PNGヘッダー情報を解析する必要があり、新しいオフセットでいくつかのヘッダーを更新する必要があるかもしれませんが、全体としてこれはそうではないかもしれません完全なエンコーダーを書くのと同じくらいの仕事。

注: この方法はお勧めしませが、他のすべてのオプションが手間がかかりすぎたり、複雑すぎたりする場合は、少なくともこれを検討する必要があります。また、頭の中でこれを知っているわけではありませんが、どちらの形式も実際には「非画像データ」のような「大きな」チャンクをサポートしていない可能性があります。

アプリケーションが画像を使用する唯一のアプリケーションである場合は、元のファイルを独自の「フォーマット」で「ラップ」することを検討するだけでよいでしょう (画像 + テキストを個別のファイルとして含む zip/gz ストリームから、単一のファイルとして独自のカスタム ファイル形式である可能性があります)

于 2012-07-19T16:08:28.773 に答える