我使用 DCRaw 作为命令行实用程序从 DNG 图像中提取缩略图。缩略图颜色很差,反转它们也无济于事。
我用我的相机拍了一张照片,预览看起来像这样:
这是我如何称呼 DCRAW:
Settings oSettings = Settings.GetInstance();
var startInfo = new ProcessStartInfo(dcRawPath)
{
Arguments = "-e \"" + sInputFileName + "\"",
UseShellExecute = true,
RedirectStandardOutput = false,
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true,
WorkingDirectory = RootDirectory
};
var process = Process.Start(startInfo);
结果 ppm 文件如下所示:
我尝试使用以下代码反转缩略图:
static readonly ColorMatrix _inverseColorMatrix = new ColorMatrix(new[]
{
new float[] {-1, 0, 0, 0, 0},
new float[] {0, -1, 0, 0, 0},
new float[] {0, 0, -1, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {1, 1, 1, 0, 1}
});
public static Bitmap InverseImage(Bitmap source)
{
var newBitmap = new Bitmap(source.Width, source.Height);
using (var g = Graphics.FromImage(newBitmap))
{
var attributes = new ImageAttributes();
attributes.SetColorMatrix(_inverseColorMatrix);
g.DrawImage(source, new Rectangle(0, 0, source.Width, source.Height),
0, 0, source.Width, source.Height, GraphicsUnit.Pixel, attributes);
}
return newBitmap;
}
这给了我这样的缩略图:
我使用 Photoshop 得到了相同的结果,这意味着代码正确地反转了图像,但似乎这不是解析 DNG 缩略图的方法。
如何反转 DCRaw 生成的缩略图以提供与第一张图像非常相似的正确颜色。
注意:我的相机是带有 DNG 输出的 Lumia 1020。
编辑:可以从这里下载原始 DNG 文件