« Track Luggage With Bluetooth | Main | 仕事してる感 »

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

働いとるなっ!

Post a comment