DOBON.NETプログラミング掲示板過去ログ
C#:Jpegロスレス回転時の解像度情報欠落
題名: C#:Jpegロスレス回転時の解像度情報欠落
著者: TD
日時: 2013/04/03 12:00:00
ID: 31441
この記事の返信元:
(なし)
この記事への返信:
[31442]
【報告】この投稿はマルチポストです
(報告)
2013/04/03 13:13:37
ツリーを表示
環境/言語:[C# .Net3.5 Windows 7 or 8]
分類:[.NET]
JPEGファイルを読み込み、ロスレス回転を行い再度JPEGファイルとして保存する処理を実装しております。
本処理の実行時に、特定の環境にて画像ファイル保存時に解像度情報が保存されないという事象が発生します。
※.NetFrameworkは3.5
※特定の端末:Windows7 Windows8
VistaとXPでは発生していない(.NetはSP1適用済み)
本件においての見解・回避策をご教授頂けると助かります。
以下再現可能なソースコードとなります
※ここでは単純化を図るために180回転固定のコードとしておきます
public class JpegLosslessRotator
{
private ImageCodecInfo codecInfo;
private EncoderParameters encParms;
public JpegLosslessRotator()
{
this.codecInfo = GetEncoderInfo("image/jpeg");
this.encParms = new EncoderParameters(1);
this.encParms.Param[0] = new EncoderParameter(Encoder.Transformation, (long)EncoderValue.TransformRotate180);
}
public void Rotate(string srcFilePath, string destFilePath)
{
File.Delete(destFilePath);
using (var fs = File.OpenRead(srcFilePath))
{
using (var pic = Image.FromStream(fs, false, false))
{
pic.Save(destFilePath, this.codecInfo, this.encParms);
}
}
}
private ImageCodecInfo GetEncoderInfo(String mimeType)
{
var encoders = ImageCodecInfo.GetImageEncoders();
for (int j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
{
return encoders[j];
}
}
return null;
}
}
題名: 【報告】この投稿はマルチポストです
著者: (報告)
日時: 2013/04/03 13:13:37
ID: 31442
この記事の返信元:
[31441]
C#:Jpegロスレス回転時の解像度情報欠落
TD
2013/04/03 12:00:00
この記事への返信:
(なし)
ツリーを表示
この投稿はマルチポストです。
●マルチポストされている場所
http://bbs.wankuma.com/index.cgi?mode=al2&namber=66140
----------
この掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのマナーについて」をお読みください。
●書き込みのマナーについて
http://dobon.net/vb/bbs/index.html
DOBON.NET
|
プログラミング道
|
プログラミング掲示板
分類:[.NET]
JPEGファイルを読み込み、ロスレス回転を行い再度JPEGファイルとして保存する処理を実装しております。
本処理の実行時に、特定の環境にて画像ファイル保存時に解像度情報が保存されないという事象が発生します。
※.NetFrameworkは3.5
※特定の端末:Windows7 Windows8
VistaとXPでは発生していない(.NetはSP1適用済み)
本件においての見解・回避策をご教授頂けると助かります。
以下再現可能なソースコードとなります
※ここでは単純化を図るために180回転固定のコードとしておきます
public class JpegLosslessRotator
{
private ImageCodecInfo codecInfo;
private EncoderParameters encParms;
public JpegLosslessRotator()
{
this.codecInfo = GetEncoderInfo("image/jpeg");
this.encParms = new EncoderParameters(1);
this.encParms.Param[0] = new EncoderParameter(Encoder.Transformation, (long)EncoderValue.TransformRotate180);
}
public void Rotate(string srcFilePath, string destFilePath)
{
File.Delete(destFilePath);
using (var fs = File.OpenRead(srcFilePath))
{
using (var pic = Image.FromStream(fs, false, false))
{
pic.Save(destFilePath, this.codecInfo, this.encParms);
}
}
}
private ImageCodecInfo GetEncoderInfo(String mimeType)
{
var encoders = ImageCodecInfo.GetImageEncoders();
for (int j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
{
return encoders[j];
}
}
return null;
}
}