Frage

Ich versuche, eine mehrseitige TIFF-Datei aus einem vorhandenen Bild zu erzeugen, mit Code von Bob Powell :

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();
}

Aber es funktioniert nicht (nur das erste Bild in dem Bild enthält), und ich weiß nicht, warum.

Was soll ich tun, ist, einen bestimmten Rahmen einer TIFF-Datei zu ändern (Anmerkungen hinzufügen, um es).

Ich weiß nicht, ob es ein einfacherer Weg, es zu tun, aber was ich im Sinne habe, ist eine mehrseitige TIFF aus dem Originalbild zu erstellen und mein eigenes Bild hinzufügen, anstatt dieses Rahmens.

War es hilfreich?

Lösung 2

Es scheint, dass dieser Prozess nicht Bildobjekt ändert, aber es ändert den Strom so ich den Speicherstrompuffer erhalten soll, und bauen ein anderes Bildobjekt:

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

Nun führen alle Frames enthalten.

Andere Tipps

[deleted ersten Teil nach comment]

Ich arbeite mit mehrseitige TIFF-Dateien mit LibTIFF.NET ; Ich fand viele quicks in der TIFF Umgang mit den Standardbibliotheken (Speicher bezogen und auch im Einklang stürzt auf 16-Bit-Graustufenbilder).

Was ist Ihr Testbild? Haben Sie versucht, einen viel Rahmen tiff (vorzugsweise mit einem großen ‚1‘ auf dem ersten Frame, eine ‚2 auf der nächsten etc;. Das Sie sicher zu sein, auf dem Rahmen in der Datei enthalten helfen könnte

Eine weitere nützliche Diagnose kann tiffdump Nutzen sein, wie in libTIFF Binärdateien (auch für Windows) enthält. Dies wird Ihnen genau sagen, was Frames Sie haben.

Siehe Mit libTIFF von c # zu Zugang gekachelten TIFF-Bilder

[Bearbeiten] Wenn Sie .NET Sachen verstehen wollen: Ich habe eine neue Ressource auf mehrseitige TIFF-Dateien gefunden, die Standard-.NET-Funktionalität (obwohl ich mit LibTIFF hafte. NET): TheCodeProject: Speichern von Bildern in eine mehrseitige TIFF-Datei ... Wenn Sie es, der Code-snippet in Form1.cs Funktion saveMultipage (..) ist ähnlich (aber immer noch etwas anders) als Code herunterladen. Vor allem der Spülung am Ende in einer differnt Art und Weise getan, und die Datei vor dem ersten Bild wird gelöscht ... [/ Edit]

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top