Ich bin in der Lage, eine einzelne Seite TIFF zu einem PNG in. NET zu konvertieren, jedoch, wie würde ich dies für eine mehrseitige TIFF tun?Konvertieren mehrseitige TIFF in PNG. NET
Antwort
Sie sollten aktiv Rahmen auswählen (Seite) in einer Schleife und umwandeln in eine png jede TIFF-Seite.
int pageCount = 1;
try
{
pageCount = bmp.GetFrameCount(FrameDimension.Page);
}
catch (Exception)
{
// sometimes GDI+ throws internal exceptions.
// just ignore them.
}
for (int page = 0; page < pageCount; page++)
{
bmp.SelectActiveFrame(FrameDimension.Page, page);
// save or otherwise process tiff page
}
In diesem Code wird davon ausgegangen, dass Sie das Tiff-Bild im System.Drawing.Bitmap-Objekt laden können.
Imagemagick kann fast alles mit Bildern tun, aber es könnte eine Weile dauern, um es richtig zu machen aufgrund der überwältigenden Anzahl von Optionen zur Auswahl. Sie können Interop verwenden, um direkt mit Imagemagick zu arbeiten, oder Sie können einen .NET-Wrapper verwenden. Ich habe nur Interop verwendet, also weiß ich nicht, wie gut oder schlecht die wrapper ist.
private readonly ImageMagickObject.MagickImageClass _imageMagick = new ImageMagickObject.MagickImageClass();
var parameters = new object[] {sourcePath, destPath};
_imageMagick.Convert(ref parameters);
Die Parameter, die Sie auf der ImageMagick-Website selbst herausfinden müssen. Schau dir die Hilfe für den Kommandozeilenparameter an und suche das Forum nach multipage tiff. Ich nehme an, Sie möchten die Tiff in mehrere PNGs teilen? Dann vielleicht so etwas wie folgt aus:
convert MULTIPAGE.TIF Einzel% d.png
Komplettes Beispiel ohne die Notwendigkeit für 3'rd Partei Baugruppen:
' MAIN CODE '
Dim ImageBitmap = Bitmap.FromStream(ImageStream)
Dim FrameCount = ImageBitmap.GetFrameCount(FrameDimension.Page)
Dim RunningHeight As Integer = 0
Dim MaxWidth As Integer = 0
For MeasurementFrameIndex As Integer = 0 To FrameCount - 1
ImageBitmap.SelectActiveFrame(FrameDimension.Page, MeasurementFrameIndex)
RunningHeight += ImageBitmap.Height
MaxWidth = Math.Max(MaxWidth, ImageBitmap.Width)
Next
Dim CombinedBitmap As New Bitmap(MaxWidth, RunningHeight)
Dim RunningVerticalPosition As Integer = 0
For CombinationFrameIndex As Integer = 0 To FrameCount - 1
ImageBitmap.SelectActiveFrame(FrameDimension.Page, CombinationFrameIndex)
EmbedBitmap(ImageBitmap, CombinedBitmap, RunningVerticalPosition)
RunningVerticalPosition += ImageBitmap.Height + 1
Next
' SUPPORT ROUTINES '
Private Shared Sub EmbedBitmap(
SourceBitmap As Bitmap,
ByRef DestinationBitmap As Bitmap,
VerticalPosition As Integer)
Dim SourceRectangle As New Rectangle(
New Point(0, 0),
New Size(SourceBitmap.Width, SourceBitmap.Height))
Dim DestinationRectangle As New Rectangle(
New Point(0, VerticalPosition),
New Size(SourceBitmap.Width, SourceBitmap.Height))
Using Canvas As Graphics = Graphics.FromImage(DestinationBitmap)
Canvas.DrawImage(
SourceBitmap,
DestinationRectangle,
SourceRectangle,
GraphicsUnit.Pixel)
End Using
End Sub
dank @ Tom Halladay
ich eine C# Version des Codes liefern werde
private static Bitmap ConvertTiffToBitmapStream(byte[] tiffImage){
System.Drawing.Image ImageBitmap = Bitmap.FromStream(new MemoryStream(tiffImage));
int FrameCount = ImageBitmap.GetFrameCount(FrameDimension.Page);
int RunningHeight = 0;
int MaxWidth = 0;
for (int MeasurementFrameIndex = 0; MeasurementFrameIndex <= FrameCount - 1; MeasurementFrameIndex++){
ImageBitmap.SelectActiveFrame(FrameDimension.Page, MeasurementFrameIndex);
RunningHeight += ImageBitmap.Height;
MaxWidth = Math.Max(MaxWidth, ImageBitmap.Width);
}
Bitmap CombinedBitmap = new Bitmap(MaxWidth, RunningHeight);
int RunningVerticalPosition = 0;
for (int CombinationFrameIndex = 0; CombinationFrameIndex <= FrameCount - 1; CombinationFrameIndex++){
ImageBitmap.SelectActiveFrame(FrameDimension.Page, CombinationFrameIndex);
EmbedBitmap(new Bitmap(ImageBitmap), ref CombinedBitmap, RunningVerticalPosition);
RunningVerticalPosition += ImageBitmap.Height + 1;
}
return CombinedBitmap;
}
private static void EmbedBitmap(Bitmap SourceBitmap, ref Bitmap DestinationBitmap, int VerticalPosition){
Rectangle SourceRectangle = new Rectangle(new Point(0, 0), new Size(SourceBitmap.Width, SourceBitmap.Height));
Rectangle DestinationRectangle = new Rectangle(new Point(0, VerticalPosition), new Size(SourceBitmap.Width, SourceBitmap.Height));
using (Graphics Canvas = Graphics.FromImage(DestinationBitmap)){
Canvas.DrawImage(SourceBitmap, DestinationRectangle, SourceRectangle, GraphicsUnit.Pixel);
}
}
- 1. Stream (und konvertieren?) Mehrseitige TIFF mit ASP.NET
- 2. Konvertieren von TIFF-Dateien nach PNG in .Net
- 3. Konvertieren von Bitonal TIFF in Bitonal PNG in C#
- 4. Kann iText PDF in TIFF-Bilder konvertieren?
- 5. Konvertieren JPEG/PNG-Bild in TIFF-Bildformat in Android OS
- 6. Konvertieren Sie eine TIFF-Datei in ein PNG-Format von 8 Bit pro Pixel. NET
- 7. Kostenloses Tool oder Bibliothek zum Konvertieren von Tiff-Dateien zu pdf in .Net
- 8. konvertieren tiff in jpg format
- 9. Wie konvertiert man TIFF zu JPEG/PNG in Java
- 10. Highchart.getSVG konvertieren in png
- 11. Konvertieren eines TIFF-Bildes in PNG/JPG/GIF in PHP ohne Imagick
- 12. NSBitmapImageRep und mehrseitige TIFFs
- 13. Konvertieren von PNG in JPEG
- 14. Konvertieren von EPS/PDF in JPEG/PNG?
- 15. Konvertieren von Bitmaps in ein mehrseitiges TIFF-Bild in .NET 2.0
- 16. Opencv Statische Build, JPEG, PNG, TIFF nicht statisch verknüpft?
- 17. Warum kopiert das Ressourcenpaket .png als .tiff-Bilder?
- 18. Konvertieren von ppm nach PNG
- 19. Mehrseitige App in Framework7
- 20. konvertieren uiview zu .png image
- 21. Png-Datei in Ico mit PHP konvertieren
- 22. Konvertieren von SVG in PNG mit C#
- 23. SVG in png oder andere konvertieren?
- 24. SVG-Stream in PNG oder JPG konvertieren
- 25. Konvertieren von PDF in PNG mit ImageMagick
- 26. Java konvertieren GIF-Bild in PNG-Format
- 27. Konvertieren von Byte-Array in PNG-Bild
- 28. Konvertieren von PSD zu PNG in asp.net?
- 29. Python Konvertieren HTML-Bild in PNG
- 30. Wie konvertiere ich mehrere PNG-Bilder in eine einzige TIFF-Datei