Wenn ich ein Bild rotiere, schaltet .Net die tiff-Codierung um. Gibt es eine Möglichkeit, das CCITT Fax 4 (Gruppe 4 Fax-Codierung) zu behalten und nicht auf LZW umzustellen? Hier ist, wie ich ein Bild auf der Festplatte rotiere..Net Image.Save ändert tiff von CTTIT Fax 4 auf LZW
System.Drawing.Image img = System.Drawing.Image.FromFile(input);
//rotate the picture by 90 degrees
img.RotateFlip(RotateFlipType.Rotate90FlipNone);
img.Save(input, System.Drawing.Imaging.ImageFormat.Tiff);
Danke, Brian
Update: Hier ist der Code auf der Grundlage des Artikel zu unten verlinkt. Ich wollte den Code hier für Compleynes hinzufügen. Außerdem stelle ich die horizontale Auflösung ein, da die Bitmaps standardmäßig auf 96 DPI eingestellt sind.
//create an object that we can use to examine an image file
System.Drawing.Image img = System.Drawing.Image.FromFile(input);
//rotate the picture by 90 degrees
img.RotateFlip(RotateFlipType.Rotate90FlipNone);
// load into a bitmap to save with proper compression
Bitmap myBitmap = new Bitmap(img);
myBitmap.SetResolution(img.HorizontalResolution, img.VerticalResolution);
// get the tiff codec info
ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/tiff");
// Create an Encoder object based on the GUID for the Compression parameter category
System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Compression;
// create encode parameters
EncoderParameters myEncoderParameters = new EncoderParameters(1);
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, (long)EncoderValue.CompressionCCITT4);
myEncoderParameters.Param[0] = myEncoderParameter;
// save as a tiff
myBitmap.Save(input, myImageCodecInfo, myEncoderParameters);
// get encoder info for specified mime type
private static ImageCodecInfo GetEncoderInfo(String mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
Dank, das funktioniert. Es ändert jedoch die DPI von 300 auf 96. Weiß jemand, wie man es einstellt? – BrianK
Ich denke, die Bildklasse unterstützt dies (zumindest funktioniert es für mich). Sie brauchen also keine zusätzliche Bitmap, und als zusätzlichen Bonus müssen Sie sich nicht mit der Auflösung herumärgern. – user12861
BrianK: Bitmap.SetResolution() wird es tun, (obwohl das dir wahrscheinlich 2 Jahre später nicht helfen wird!) – user20493