質問

を使用して既存の画像から複数ページの TIFF ファイルを生成しようとしています ボブ・パウエルによるコード:

picture.SelectActiveFrame(FrameDimension.Page, 0);
var image = new Bitmap(picture);
using (var stream = new MemoryStream())
{
    ImageCodecInfo codecInfo = null;
    foreach (var imageEncoder in ImageCodecInfo.GetImageEncoders())
    {
        if (imageEncoder.MimeType != "image/tiff") continue;
        codecInfo = imageEncoder;
        break;
    }
    var parameters = new EncoderParameters
    {
        Param = new []
        {
            new EncoderParameter(Encoder.SaveFlag, (long) EncoderValue.MultiFrame)
        }
    };
    image.Save(stream, codecInfo, parameters);

    parameters = new EncoderParameters
    {
        Param = new[]
        {
            new EncoderParameter(Encoder.SaveFlag, (long) EncoderValue.FrameDimensionPage)
        }
    };
    for (var i = 1; i < picture.GetFrameCount(FrameDimension.Page); i++)
    {
        picture.SelectActiveFrame(FrameDimension.Page, i);
        var img = new Bitmap(picture);
        image.SaveAdd(img, parameters);

    }

    parameters = new EncoderParameters
    {
        Param = new[] 
        {
            new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.Flush) 
        }
    };
    image.SaveAdd(parameters);
    stream.Flush();
}

しかし、それは機能せず(画像には最初のフレームのみが含まれています)、その理由はわかりません。

私がやりたいのは、TIFF ファイルの特定のフレームを変更する (注釈を追加する) ことです。

もっと簡単な方法があるかどうかはわかりませんが、私が考えているのは、元の画像から複数ページの TIFF を作成し、そのフレームの代わりに独自の画像を追加することです。

役に立ちましたか?

解決 2

これは、このプロセスは、イメージオブジェクトを変更しないようですが、私はメモリストリームバッファを取得し、別の画像オブジェクトを構築する必要がありますので、それは、ストリームを変更します:

var buffer=stream.GetBuffer();
using(var newStream=new MemoryStream(buffer))
{
var result=Image.FromStream(newStream);
}

さて結果はすべてのフレームが含まれます。

他のヒント

[コメント後の最初の部分を削除]

私は複数ページの TIFF を使用して作業しています リブTIFF.NET;標準ライブラリを使用した TIFF の処理で多くのクイックな方法を見つけました (メモリ関連および 16 ビット グレー スケール イメージでの一貫したクラッシュ)。

テスト画像は何ですか?多数のフレームの TIFF を試してみましたか (できれば最初のフレームに大きな「1」、次のフレームに「2」など)これは、ファイルに含まれるフレームを確認するのに役立ちます。

もう 1 つの有用な診断は、LibTiff バイナリ (Windows 用) に含まれている tiffdump ユーティリティです。これにより、どのフレームがあるかが正確にわかります。

見る C# から LibTiff を使用してタイル化された tiff イメージにアクセスする

[編集] .NET について理解したい場合は、次のようにします。標準の .NET 機能を使用して、マルチページ tiff で新しいリソースを見つけました (ただし、LibTIFF.NET を使い続けるつもりです)。 コードプロジェクト:画像を複数ページの TIFF ファイルに保存します... ダウンロードすると、Form1.cs 関数 saveMultipage(..) のコード スニペットは、実際のコードと似ています (ただし、若干異なります)。特に最後のフラッシングは別の方法で行われ、最初のフレームの前にファイルが削除されます...[/編集]

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top