public ExifData Parse(BitmapSource bitmap)
{
BitmapMetadata metadata;
try
{
metadata = (BitmapMetadata) bitmap.Metadata;
}
catch
{
return null;
}
return new ExifData
{
DateTaken = GetDateTaken( metadata ),
CameraManufacturer = GetStringValue( metadata, m => m.CameraManufacturer ),
CameraModel = GetStringValue( metadata, m => m.CameraModel ),
CreationSoftware = metadata.ReadString( CreationSoftwareQuery ),
ImageWidth = bitmap.PixelWidth,
ImageHeight = bitmap.PixelHeight,
HorizontalResolution = metadata.ReadUnsignedRational( HorizontalResolutionQuery ),
VerticalResolution = metadata.ReadUnsignedRational( VerticalResolutionQuery ),
ImageOrientation = GetOrientation( metadata ),
ColorRepresentation = GetColorRepresentation( metadata ),
ISOSpeed = metadata.ReadUShort( ISOSpeedQuery ),
FNumber = metadata.ReadUnsignedRational( FNumberQuery ),
ExposureTime = metadata.ReadUnsignedRational( ExposureTimeQuery ),
ExposureCompensation = metadata.ReadSignedRational( ExposureCompensationQuery ),
LensAperture = metadata.ReadUnsignedRational( LensApertureQuery ),
FocalLength = metadata.ReadUnsignedRational( FocalLengthQuery ),
FlashMode = GetFlashMode( metadata ),
ExposureMode = GetExposureMode( metadata ),
WhiteBalanceMode = GetWhiteBalanceMode( metadata ),
GpsData = m_gpsInfoParser.Parse( metadata )
};
}