Beschreibung:
Verlustfreies Drehen für JPEG:
Image image = Image.FromFile("image1.jpg");
ImageCodecInfo[] imageCodecInfos = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo imageCodecInfo = null;
for (int i = 0; i < imageCodecInfos.Length; i++)
{
if (imageCodecInfos[i].MimeType == "image/jpeg")
{
imageCodecInfo = imageCodecInfos[i];
break;
}
}
EncoderParameters encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(
System.Drawing.Imaging.Encoder.Transformation,
(long)EncoderValue.TransformRotate90);
image.Save("image2.jpg", imageCodecInfo, encoderParameters);
Schlagwörter: rotate, rotieren, Rotation, drehen, Drehung, JPG, JPEG, JPEGs, Bild, Bilder, Bitmap, Image, verlustfrei, Kompression, Komprimierung
Das verlustfreie Drehen mit dem obengenannten Quelltext funktioniert nicht bei jeder JPEG-Datei. Ich glaube es funktioniert nur bei Bildern, wo die Breite und Höhe der Auflösung durch 16 teilbar ist.
Hallo zusammen,
richtig, es wird nur dann verlustfrei rotiert, wenn die Kantenlängen des Bildes ein Vielfaches des Blockgröße des JPEG-Bildes sind (typische Blockgrößen sind 8x8 und 16x16). Und das auch nur dann, wenn das Bitmap-Objekt direkt aus der JPEG-Datei geladen wurde und dadurch noch Zugriff auf die komprimierten Originaldaten besteht. Wenn diese Voraussetzungen erfüllt sind, wird durch EncoderValue.TransformRotate90 tatsächlich verlustfrei gedreht. Das habe ich selbst ausprobiert.
herbivore