Exif on C#
SonyとMicrosoftの仲が悪いのが関係あってか(謎)、Sonyのデジカメで撮ったカメラのExif情報を.NETでうまく読み取れない。因みに、.NETでExifを読むにはどうすればいいのかは@ITのここを参照。
でだ、Sonyのデジカメ画像を読み込むとSystem.Drawing.Imageが例外を投げてくる。
fotolog.util.TextExif.TestGetCameraModel : System.ArgumentNullException : 値を Null にすることはできません。 at System.Runtime.InteropServices.Marshal.CopyBytesToManaged(Int32 source, Byte[] destination, Int32 startIndex, Int32 length) at System.Drawing.Imaging.PropertyItemInternal.ConvertFromMemory(IntPtr propdata, Int32 count) at System.Drawing.Image.get_PropertyItems() at fotolog.util.Exif..ctor(String file) at fotolog.util.TextExif.Init()
てことで、早速ググってみたら同じような目にあった人を発見。氏曰く、Sonyデジカメの吐くExifの情報に問題があるっぽい。早い話はLengthが0のExifタグがあると不味いっぽい。ということで、別にこれはSonyデジカメの写真に限った事じゃなくて、そんな感じのExifタグがあればどれでも駄目と。どうも、.NET Frameworkのバグっぽい。
困った困った。ExifのParserつくっちゃうのー・・・とかそう言う勢いだったんだけど、もう一回ググって見る事に。そしたら、同じ様な問題の人をまた発見。しかも、そこには、workaroundが!てことで、解決。
要は、Image.PropertyItemsを使わないで自分でImage.GetPropertyItemを使って配列を組み立てれば良いと。
Comments
働いとるなっ!
Posted by: yugo | July 21, 2004 12:22 AM