画像を jpeg に保存するときに、高度な画像パラメーターを操作しようとしています。
これが私がやっていることです:
private static ImageCodecInfo GetEncoderInfo(String mimeType = "image/jpeg")
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
...
var img=Image.FromFile(
@"myoriginal.jpg");
ImageCodecInfo nfo = GetEncoderInfo();
var eps = new EncoderParameters(2);
eps.Param[0] = new EncoderParameter(Encoder.LuminanceTable, new byte[]
{ 2, 1, 1, 2, 2, 4, 5, 6,
1, 1, 1, 2, 3, 6, 6, 6,
1, 1, 2, 2, 4, 6, 7, 6,
1, 2, 2, 3, 5, 9, 8, 6,
2, 2, 4, 6, 7, 11, 10, 8,
2, 4, 6, 6, 8, 10, 11, 9,
5, 6, 8, 9, 10, 12, 12, 10,
7, 9, 10, 10, 11, 10, 10, 10 });
eps.Param[1] = new EncoderParameter(Encoder.ChrominanceTable, new byte[]
{ 2, 2, 2, 5, 10, 10, 10, 10 ,
2, 2, 3, 7, 10, 10, 10, 10,
2, 3, 6, 10, 10, 10, 10, 10,
5 , 7, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10 , 10, 10 });
ImageCodecInfo ici = GetEncoderInfo();
img.Save(@"changed.jpg",ici,eps);
これを実行すると、次のエラーが発生します。
System.ArgumentException: Parameter is not valid.
LuminanceTable と ChrominanceTable を設定するにはどうすればよいですか?