private void FillProperties(FIBITMAP dib) { // Create a wrapper for all metadata the image contains ImageMetadata iMetadata = new ImageMetadata(dib); var main = ((MDM_EXIF_MAIN)iMetadata[FREE_IMAGE_MDMODEL.FIMD_EXIF_MAIN]); var exif = ((MDM_EXIF_EXIF)iMetadata[FREE_IMAGE_MDMODEL.FIMD_EXIF_EXIF]); _equipMake = SafeTrim(main.Make); _equipModel = SafeTrim(main.EquipmentModel); _imageDescription = SafeTrim(main.ImageDescription); _copyright = SafeJoin(main.Copyright); _dtOrig = exif.DateTimeOriginal; _dtDigitized = exif.DateTimeDigitized; _focalLength = exif.FocalLength; _fNumber = exif.FNumber; if (exif.ExposureTime.HasValue) { _exposureTime = string.Format("{0}/{1}", exif.ExposureTime.Value.Numerator, exif.ExposureTime.Value.Denominator); } _exposureBias = exif.ExposureBiasValue; _isoSpeed = exif.ISOSpeedRatings != null ? exif.ISOSpeedRatings[0].ToString() : null; _orientation = main.Orientation; _pixXDim = exif.PixelXDimension; _pixYDim = exif.PixelYDimension; _flashFired = exif.Flash.HasValue && (exif.Flash.Value & 1) == 1; if (exif.Flash.HasValue) { FillFlashModeResult(exif.Flash.Value); } _meteringMode = (MeteringMode)(exif.MeteringMode.HasValue ? exif.MeteringMode.Value : 0); TryParseGPS(iMetadata, out _latitude, out _longitude); }
private IGalleryObjectMetadataItem GetMeteringModeMetadataItem() { IGalleryObjectMetadataItem mdi = null; MetadataItem rawMdi = null; if (RawMetadata.TryGetValue(RawMetadataItemName.ExifMeteringMode, out rawMdi)) { if (rawMdi.ExtractedValueType == ExtractedValueType.Int64) { MeteringMode meterMode = (MeteringMode)(Int64)rawMdi.Value; if (MetadataEnumHelper.IsValidMeteringMode(meterMode)) { mdi = new GalleryObjectMetadataItem(int.MinValue, FormattedMetadataItemName.MeteringMode, Resources.Metadata_MeteringMode, meterMode.ToString(), true); } } } return(mdi); }
public string AsMeteringMode() { MeteringMode meteringMode = (MeteringMode)Value; switch (meteringMode) { case MeteringMode.Multi: return("Multi"); case MeteringMode.Center: return("Center"); case MeteringMode.SpotStandard: return("Spot: Standard"); case MeteringMode.SpotLarge: return("Spot: Large"); case MeteringMode.EntireScreenAvg: return("Entire Screen Avg."); case MeteringMode.Highlight: return("Highlight"); default: return("???(" + Value + ")"); } }
private void FillProperties(FIBITMAP dib) { // Create a wrapper for all metadata the image contains ImageMetadata iMetadata = new ImageMetadata(dib); var main = ((MDM_EXIF_MAIN) iMetadata[FREE_IMAGE_MDMODEL.FIMD_EXIF_MAIN]); var exif = ((MDM_EXIF_EXIF) iMetadata[FREE_IMAGE_MDMODEL.FIMD_EXIF_EXIF]); _equipMake = SafeTrim(main.Make); _equipModel = SafeTrim(main.EquipmentModel); _imageDescription = SafeTrim(main.ImageDescription); _copyright = SafeJoin(main.Copyright); _dtOrig = exif.DateTimeOriginal; _dtDigitized = exif.DateTimeDigitized; _focalLength = exif.FocalLength; _fNumber = exif.FNumber; if (exif.ExposureTime.HasValue) _exposureTime = string.Format("{0}/{1}", exif.ExposureTime.Value.Numerator, exif.ExposureTime.Value.Denominator); _exposureBias = exif.ExposureBiasValue; _isoSpeed = exif.ISOSpeedRatings != null ? exif.ISOSpeedRatings[0].ToString() : null; _orientation = main.Orientation; _pixXDim = exif.PixelXDimension; _pixYDim = exif.PixelYDimension; _flashFired = exif.Flash.HasValue && (exif.Flash.Value & 1) == 1; if (exif.Flash.HasValue) FillFlashModeResult(exif.Flash.Value); _meteringMode = (MeteringMode) (exif.MeteringMode.HasValue ? exif.MeteringMode.Value : 0); TryParseGPS(iMetadata, out _latitude, out _longitude); }
Tag CreateSpecificTag(TagInfo info, string numberValue) { try { if (info.IsGps) { switch (info.Name.ToLower()) { case "gpslatituderef": return(new Tag <GpsLatitudeRef> { TypedValue = GpsLatitudeRef.FromKey(numberValue) }); case "gpslongituderef": return(new Tag <GpsLongitudeRef> { TypedValue = GpsLongitudeRef.FromKey(numberValue) }); case "gpsaltituderef": return(new Tag <GpsAltitudeRef> { TypedValue = GpsAltitudeRef.FromKey(byte.Parse(numberValue)) }); case "gpsstatus": return(new Tag <GpsStatus> { TypedValue = GpsStatus.FromKey(numberValue) }); case "gpsmeasuremode": return(new Tag <GpsMeasureMode> { TypedValue = GpsMeasureMode.FromKey(numberValue) }); case "gpsspeedref": return(new Tag <GpsSpeedRef> { TypedValue = GpsSpeedRef.FromKey(numberValue) }); case "gpstrackref": return(new Tag <GpsTrackRef> { TypedValue = GpsTrackRef.FromKey(numberValue) }); case "gpsimgdirectionref": return(new Tag <GpsImgDirectionRef> { TypedValue = GpsImgDirectionRef.FromKey(numberValue) }); case "gpsdestlatituderef": return(new Tag <GpsDestLatitudeRef> { TypedValue = GpsDestLatitudeRef.FromKey(numberValue) }); case "gpsdestlongituderef": return(new Tag <GpsDestLongitudeRef> { TypedValue = GpsDestLongitudeRef.FromKey(numberValue) }); case "gpsdestbearingref": return(new Tag <GpsDestBearingRef> { TypedValue = GpsDestBearingRef.FromKey(numberValue) }); case "gpsdestdistanceref": return(new Tag <GpsDestDistanceRef> { TypedValue = GpsDestDistanceRef.FromKey(numberValue) }); case "gpsdifferential": return(new Tag <GpsDifferential> { TypedValue = GpsDifferential.FromKey(ushort.Parse(numberValue)) }); } } if (info.IsNikon) { switch (info.Name.ToLower()) { case "colorspace": return(new Tag <NikonColorSpace> { TypedValue = NikonColorSpace.FromKey(ushort.Parse(numberValue)) }); case "vibrationreduction": return(new Tag <NikonVibrationReduction> { TypedValue = NikonVibrationReduction.FromKey(byte.Parse(numberValue)) }); case "vrmode": return(new Tag <NikonVRMode> { TypedValue = NikonVRMode.FromKey(byte.Parse(numberValue)) }); case "imageauthentication": return(new Tag <NikonImageAuthentication> { TypedValue = NikonImageAuthentication.FromKey(byte.Parse(numberValue)) }); case "actived-lighting": return(new Tag <NikonActiveDLighting> { TypedValue = NikonActiveDLighting.FromKey(ushort.Parse(numberValue)) }); case "picturecontroladjust": return(new Tag <NikonPictureControlAdjust> { TypedValue = NikonPictureControlAdjust.FromKey(byte.Parse(numberValue)) }); case "filtereffect": return(new Tag <NikonFilterEffect> { TypedValue = NikonFilterEffect.FromKey(byte.Parse(numberValue)) }); case "toningeffect": return(new Tag <NikonToningEffect> { TypedValue = NikonToningEffect.FromKey(byte.Parse(numberValue)) }); case "daylightsavings": return(new Tag <NikonDaylightSavings> { TypedValue = NikonDaylightSavings.FromKey(byte.Parse(numberValue)) }); case "datedisplayformat": return(new Tag <NikonDateDisplayFormat> { TypedValue = NikonDateDisplayFormat.FromKey(byte.Parse(numberValue)) }); case "isoexpansion": return(new Tag <NikonIsoExpansion> { TypedValue = NikonIsoExpansion.FromKey(ushort.Parse(numberValue)) }); case "isoexpansion2": return(new Tag <NikonIsoExpansion2> { TypedValue = NikonIsoExpansion2.FromKey(ushort.Parse(numberValue)) }); case "vignettecontrol": return(new Tag <NikonVignetteControl> { TypedValue = NikonVignetteControl.FromKey(ushort.Parse(numberValue)) }); case "autodistortioncontrol": return(new Tag <NikonAutoDistortionControl> { TypedValue = NikonAutoDistortionControl.FromKey(byte.Parse(numberValue)) }); case "hdr": return(new Tag <NikonHdr> { TypedValue = NikonHdr.FromKey(byte.Parse(numberValue)) }); case "hdrlevel": return(new Tag <NikonHdrLevel> { TypedValue = NikonHdrLevel.FromKey(byte.Parse(numberValue)) }); case "hdrsmoothing": return(new Tag <NikonHdrSmoothing> { TypedValue = NikonHdrSmoothing.FromKey(byte.Parse(numberValue)) }); case "hdrlevel2": return(new Tag <NikonHdrLevel2> { TypedValue = NikonHdrLevel2.FromKey(byte.Parse(numberValue)) }); case "textencoding": return(new Tag <NikonTextEncoding> { TypedValue = NikonTextEncoding.FromKey(byte.Parse(numberValue)) }); case "flashmode": return(new Tag <NikonFlashMode> { TypedValue = NikonFlashMode.FromKey(byte.Parse(numberValue)) }); case "afareamode": return(new Tag <NikonAfAreaMode> { TypedValue = NikonAfAreaMode.FromKey(byte.Parse(numberValue)) }); case "afpoint": return(new Tag <NikonAfPoint> { TypedValue = NikonAfPoint.FromKey(byte.Parse(numberValue)) }); case "afpointsinfocus": return(new Tag <NikonAfPointsInFocus> { TypedValue = NikonAfPointsInFocus.FromKey(ushort.Parse(numberValue)) }); case "nefcompression": return(new Tag <NikonNefCompression> { TypedValue = NikonNefCompression.FromKey(ushort.Parse(numberValue)) }); case "retouchhistory": return(new Tag <NikonRetouchHistory> { TypedValue = NikonRetouchHistory.FromKey(ushort.Parse(numberValue)) }); case "flashsource": return(new Tag <NikonFlashSource> { TypedValue = NikonFlashSource.FromKey(byte.Parse(numberValue)) }); case "flashcolorfilter": return(new Tag <NikonFlashColorFilter> { TypedValue = NikonFlashColorFilter.FromKey(byte.Parse(numberValue)) }); case "highisonoisereduction": return(new Tag <NikonHighIsoNoiseReduction> { TypedValue = NikonHighIsoNoiseReduction.FromKey(ushort.Parse(numberValue)) }); } } if (info.IsExif) { switch (info.Name.ToLower()) { case "interopindex": return(new Tag <InteropIndex> { TypedValue = InteropIndex.FromKey(numberValue) }); case "subfiletype": return(new Tag <SubfileType> { TypedValue = SubfileType.FromKey(uint.Parse(numberValue)) }); case "oldsubfiletype": return(new Tag <OldSubfileType> { TypedValue = OldSubfileType.FromKey(ushort.Parse(numberValue)) }); case "compression": return(new Tag <Compression> { TypedValue = Compression.FromKey(ushort.Parse(numberValue)) }); case "photometricinterpretation": return(new Tag <PhotometricInterpretation> { TypedValue = PhotometricInterpretation.FromKey(ushort.Parse(numberValue)) }); case "thresholding": return(new Tag <Thresholding> { TypedValue = Thresholding.FromKey(ushort.Parse(numberValue)) }); case "fillorder": return(new Tag <FillOrder> { TypedValue = FillOrder.FromKey(ushort.Parse(numberValue)) }); case "orientation": return(new Tag <Orientation> { TypedValue = Orientation.FromKey(ushort.Parse(numberValue)) }); case "planarconfiguration": return(new Tag <PlanarConfiguration> { TypedValue = PlanarConfiguration.FromKey(ushort.Parse(numberValue)) }); case "grayresponseunit": return(new Tag <GrayResponseUnit> { TypedValue = GrayResponseUnit.FromKey(ushort.Parse(numberValue)) }); case "resolutionunit": return(new Tag <ResolutionUnit> { TypedValue = ResolutionUnit.FromKey(ushort.Parse(numberValue)) }); case "predictor": return(new Tag <Predictor> { TypedValue = Predictor.FromKey(ushort.Parse(numberValue)) }); case "cleanfaxdata": return(new Tag <CleanFaxData> { TypedValue = CleanFaxData.FromKey(ushort.Parse(numberValue)) }); case "inkset": return(new Tag <InkSet> { TypedValue = InkSet.FromKey(ushort.Parse(numberValue)) }); case "extrasamples": return(new Tag <ExtraSamples> { TypedValue = ExtraSamples.FromKey(ushort.Parse(numberValue)) }); case "sampleformat": return(new Tag <SampleFormat> { TypedValue = SampleFormat.FromKey(ushort.Parse(numberValue)) }); case "indexed": return(new Tag <Indexed> { TypedValue = Indexed.FromKey(ushort.Parse(numberValue)) }); case "opiproxy": return(new Tag <OpiProxy> { TypedValue = OpiProxy.FromKey(ushort.Parse(numberValue)) }); case "profiletype": return(new Tag <ProfileType> { TypedValue = ProfileType.FromKey(ushort.Parse(numberValue)) }); case "faxprofile": return(new Tag <FaxProfile> { TypedValue = FaxProfile.FromKey(ushort.Parse(numberValue)) }); case "jpegproc": return(new Tag <JpegProc> { TypedValue = JpegProc.FromKey(ushort.Parse(numberValue)) }); case "ycbcrsubsampling": return(new Tag <YCbCrSubSampling> { TypedValue = YCbCrSubSampling.FromKey(numberValue) }); case "ycbcrpositioning": return(new Tag <YCbCrPositioning> { TypedValue = YCbCrPositioning.FromKey(ushort.Parse(numberValue)) }); case "sonyrawfiletype": return(new Tag <SonyRawFileType> { TypedValue = SonyRawFileType.FromKey(ushort.Parse(numberValue)) }); case "rasterpadding": return(new Tag <RasterPadding> { TypedValue = RasterPadding.FromKey(ushort.Parse(numberValue)) }); case "imagecolorindicator": return(new Tag <ImageColorIndicator> { TypedValue = ImageColorIndicator.FromKey(ushort.Parse(numberValue)) }); case "backgroundcolorindicator": return(new Tag <BackgroundColorIndicator> { TypedValue = BackgroundColorIndicator.FromKey(ushort.Parse(numberValue)) }); case "hcusage": return(new Tag <HCUsage> { TypedValue = HCUsage.FromKey(ushort.Parse(numberValue)) }); case "exposureprogram": return(new Tag <ExposureProgram> { TypedValue = ExposureProgram.FromKey(ushort.Parse(numberValue)) }); case "sensitivitytype": return(new Tag <SensitivityType> { TypedValue = SensitivityType.FromKey(ushort.Parse(numberValue)) }); case "componentsconfiguration": return(new Tag <ComponentsConfiguration> { TypedValue = ComponentsConfiguration.FromKey(ushort.Parse(numberValue)) }); case "meteringmode": return(new Tag <MeteringMode> { TypedValue = MeteringMode.FromKey(ushort.Parse(numberValue)) }); case "lightsource": case "calibrationilluminant1": case "calibrationilluminant2": return(new Tag <LightSource> { TypedValue = LightSource.FromKey(ushort.Parse(numberValue)) }); case "flash": return(new Tag <FlashValue> { TypedValue = FlashValue.FromKey(ushort.Parse(numberValue)) }); case "focalplaneresolutionunit": return(new Tag <FocalPlaneResolutionUnit> { TypedValue = FocalPlaneResolutionUnit.FromKey(ushort.Parse(numberValue)) }); case "securityclassification": return(new Tag <SecurityClassification> { TypedValue = SecurityClassification.FromKey(numberValue) }); case "sensingmethod": return(new Tag <SensingMethod> { TypedValue = SensingMethod.FromKey(ushort.Parse(numberValue)) }); case "colorspace": return(new Tag <ColorSpace> { TypedValue = ColorSpace.FromKey(ushort.Parse(numberValue)) }); case "filesource": return(new Tag <FileSource> { TypedValue = FileSource.FromKey(ushort.Parse(numberValue)) }); case "scenetype": return(new Tag <SceneType> { TypedValue = SceneType.FromKey(ushort.Parse(numberValue)) }); case "customrendered": return(new Tag <CustomRendered> { TypedValue = CustomRendered.FromKey(ushort.Parse(numberValue)) }); case "exposuremode": return(new Tag <ExposureMode> { TypedValue = ExposureMode.FromKey(ushort.Parse(numberValue)) }); case "whitebalance": return(new Tag <WhiteBalance> { TypedValue = WhiteBalance.FromKey(ushort.Parse(numberValue)) }); case "scenecapturetype": return(new Tag <SceneCaptureType> { TypedValue = SceneCaptureType.FromKey(ushort.Parse(numberValue)) }); case "gaincontrol": return(new Tag <GainControl> { TypedValue = GainControl.FromKey(ushort.Parse(numberValue)) }); case "contrast": return(new Tag <Contrast> { TypedValue = Contrast.FromKey(ushort.Parse(numberValue)) }); case "saturation": return(new Tag <Saturation> { TypedValue = Saturation.FromKey(ushort.Parse(numberValue)) }); case "sharpness": return(new Tag <Sharpness> { TypedValue = Sharpness.FromKey(ushort.Parse(numberValue)) }); case "subjectdistancerange": return(new Tag <SubjectDistanceRange> { TypedValue = SubjectDistanceRange.FromKey(ushort.Parse(numberValue)) }); case "pixelformat": return(new Tag <PixelFormat> { TypedValue = PixelFormat.FromKey(ushort.Parse(numberValue)) }); case "transformation": return(new Tag <Transformation> { TypedValue = Transformation.FromKey(ushort.Parse(numberValue)) }); case "uncompressed": return(new Tag <Uncompressed> { TypedValue = Uncompressed.FromKey(ushort.Parse(numberValue)) }); case "imagedatadiscard": return(new Tag <ImageDataDiscard> { TypedValue = ImageDataDiscard.FromKey(ushort.Parse(numberValue)) }); case "alphadatadiscard": return(new Tag <AlphaDataDiscard> { TypedValue = AlphaDataDiscard.FromKey(ushort.Parse(numberValue)) }); case "usptooriginalcontenttype": return(new Tag <USPTOOriginalContentType> { TypedValue = USPTOOriginalContentType.FromKey(ushort.Parse(numberValue)) }); case "cfalayout": return(new Tag <CFALayout> { TypedValue = CFALayout.FromKey(ushort.Parse(numberValue)) }); case "makernotesafety": return(new Tag <MakerNoteSafety> { TypedValue = MakerNoteSafety.FromKey(ushort.Parse(numberValue)) }); case "profileembedpolicy": return(new Tag <ProfileEmbedPolicy> { TypedValue = ProfileEmbedPolicy.FromKey(ushort.Parse(numberValue)) }); case "previewcolorspace": return(new Tag <PreviewColorSpace> { TypedValue = PreviewColorSpace.FromKey(ushort.Parse(numberValue)) }); case "profilehuesatmapencoding": return(new Tag <ProfileHueSatMapEncoding> { TypedValue = ProfileHueSatMapEncoding.FromKey(ushort.Parse(numberValue)) }); case "profilelooktableencoding": return(new Tag <ProfileLookTableEncoding> { TypedValue = ProfileLookTableEncoding.FromKey(ushort.Parse(numberValue)) }); case "defaultblackrender": return(new Tag <DefaultBlackRender> { TypedValue = DefaultBlackRender.FromKey(ushort.Parse(numberValue)) }); } } // ---- VALUE TAG ---- if (string.IsNullOrEmpty(info.ValueType)) { return(new Tag()); } switch (info.ValueType.ToLower()) { case "int8u": return(new Tag <byte> { TypedValue = byte.Parse(numberValue) }); case "int8s": return(new Tag <sbyte> { TypedValue = sbyte.Parse(numberValue) }); case "int16u": return(new Tag <ushort> { TypedValue = ushort.Parse(numberValue) }); case "int16s": return(new Tag <short> { TypedValue = short.Parse(numberValue) }); case "int32u": return(new Tag <uint> { TypedValue = uint.Parse(numberValue) }); case "integer": case "int32s": return(new Tag <int> { TypedValue = int.Parse(numberValue) }); case "int64u": return(new Tag <ulong> { TypedValue = ulong.Parse(numberValue) }); case "int64s": return(new Tag <long> { TypedValue = long.Parse(numberValue) }); case "float": case "rational32s": case "rational32u": return(new Tag <float> { TypedValue = float.Parse(numberValue) }); case "double": case "rational": case "rational64s": case "rational64u": case "real": return(new Tag <double> { TypedValue = double.Parse(numberValue) }); case "boolean": return(new Tag <bool> { TypedValue = bool.Parse(numberValue) }); } } catch { if (!Quiet) { Console.WriteLine($"error converting {info.TableName}::{info.Id} with name {info.Name}. Expected type: {info.ValueType} but got value: {numberValue}"); } } return(new Tag()); }
private void FillProperty(uint entryID, uint entryType, byte[] entryData) { switch ((PropertyTagId) entryID) { case PropertyTagId.EquipMake: _equipMake = (string) PropertyTag.getValue(entryType, entryData); break; case PropertyTagId.EquipModel: _equipModel = (string) PropertyTag.getValue(entryType, entryData); break; case PropertyTagId.ImageDescription: _imageDescription = (string) PropertyTag.getValue(entryType, entryData); break; case PropertyTagId.Copyright: _copyright = (string) PropertyTag.getValue(entryType, entryData); break; case PropertyTagId.ExifDTOrig: _dtOrig = (string) PropertyTag.getValue(entryType, entryData); break; case PropertyTagId.ExifDTDigitized: _dtDigitized = (string) PropertyTag.getValue(entryType, entryData); break; case PropertyTagId.ExifFocalLength: _focalLength = (Fraction) PropertyTag.getValue(entryType, entryData); break; case PropertyTagId.ExifFNumber: _fNumber = (Fraction) PropertyTag.getValue(entryType, entryData); break; case PropertyTagId.ExifExposureBias: _exposureBias = (Fraction) PropertyTag.getValue(entryType, entryData); break; case PropertyTagId.ExifExposureTime: { _exposureTime = (Fraction) PropertyTag.getValue(entryType, entryData); if (_exposureTime.Numerator > 1) { _exposureTime.Denumerator /= _exposureTime.Numerator; _exposureTime.Numerator /= _exposureTime.Numerator; } } break; case PropertyTagId.ExifISOSpeed: { object tmpValue = PropertyTag.getValue(entryType, entryData); _isoSpeed = tmpValue is UInt16 ? ((ushort) tmpValue).ToString() : ((uint) tmpValue).ToString(); } break; case PropertyTagId.Orientation: { object tmpValue = PropertyTag.getValue(entryType, entryData); _orientation = tmpValue is UInt16 ? (ushort) tmpValue : (uint) tmpValue; } break; case PropertyTagId.ExifPixXDim: { object tmpValue = PropertyTag.getValue(entryType, entryData); _pixXDim = tmpValue is UInt16 ? (ushort) tmpValue : (uint) tmpValue; } break; case PropertyTagId.ExifPixYDim: { object tmpValue = PropertyTag.getValue(entryType, entryData); _pixYDim = tmpValue is UInt16 ? (ushort) tmpValue : (uint) tmpValue; } break; case PropertyTagId.ExifFlash: { //object tmpValue = PropertyTag.getValue(EntryType, EntryData); uint tmpValue = BitConverter.ToUInt16(entryData, 0); if ((tmpValue & 0x1) == 1) { _flashFired = true; FillFlashModeResult(tmpValue); } else { _flashFired = false; FillFlashModeResult(tmpValue); } } break; case PropertyTagId.ExifMeteringMode: { object tmpValue = PropertyTag.getValue(entryType, entryData); _meteringMode = tmpValue is UInt16 ? (MeteringMode) (ushort) tmpValue : (MeteringMode) (uint) tmpValue; } break; } }
public void SetMeteringMode(MeteringMode value) { DoSubSettingI16(SettingIds.MeteringMode, (short)value); }
private void FillProperty(uint entryID, uint entryType, byte[] entryData) { switch ((PropertyTagId)entryID) { case PropertyTagId.EquipMake: _equipMake = (string)PropertyTag.getValue(entryType, entryData); break; case PropertyTagId.EquipModel: _equipModel = (string)PropertyTag.getValue(entryType, entryData); break; case PropertyTagId.ImageDescription: _imageDescription = (string)PropertyTag.getValue(entryType, entryData); break; case PropertyTagId.Copyright: _copyright = (string)PropertyTag.getValue(entryType, entryData); break; case PropertyTagId.ExifDTOrig: _dtOrig = (string)PropertyTag.getValue(entryType, entryData); break; case PropertyTagId.ExifDTDigitized: _dtDigitized = (string)PropertyTag.getValue(entryType, entryData); break; case PropertyTagId.ExifFocalLength: _focalLength = (Fraction)PropertyTag.getValue(entryType, entryData); break; case PropertyTagId.ExifFNumber: _fNumber = (Fraction)PropertyTag.getValue(entryType, entryData); break; case PropertyTagId.ExifExposureBias: _exposureBias = (Fraction)PropertyTag.getValue(entryType, entryData); break; case PropertyTagId.ExifExposureTime: { _exposureTime = (Fraction)PropertyTag.getValue(entryType, entryData); if (_exposureTime.Numerator > 1) { _exposureTime.Denumerator /= _exposureTime.Numerator; _exposureTime.Numerator /= _exposureTime.Numerator; } } break; case PropertyTagId.ExifISOSpeed: { object tmpValue = PropertyTag.getValue(entryType, entryData); _isoSpeed = tmpValue is UInt16 ? ((ushort)tmpValue).ToString() : ((uint)tmpValue).ToString(); } break; case PropertyTagId.Orientation: { object tmpValue = PropertyTag.getValue(entryType, entryData); _orientation = tmpValue is UInt16 ? (ushort)tmpValue : (uint)tmpValue; } break; case PropertyTagId.ExifPixXDim: { object tmpValue = PropertyTag.getValue(entryType, entryData); _pixXDim = tmpValue is UInt16 ? (ushort)tmpValue : (uint)tmpValue; } break; case PropertyTagId.ExifPixYDim: { object tmpValue = PropertyTag.getValue(entryType, entryData); _pixYDim = tmpValue is UInt16 ? (ushort)tmpValue : (uint)tmpValue; } break; case PropertyTagId.ExifFlash: { //object tmpValue = PropertyTag.getValue(EntryType, EntryData); uint tmpValue = BitConverter.ToUInt16(entryData, 0); if ((tmpValue & 0x1) == 1) { _flashFired = true; FillFlashModeResult(tmpValue); } else { _flashFired = false; FillFlashModeResult(tmpValue); } } break; case PropertyTagId.ExifMeteringMode: { object tmpValue = PropertyTag.getValue(entryType, entryData); _meteringMode = tmpValue is UInt16 ? (MeteringMode)(ushort)tmpValue : (MeteringMode)(uint)tmpValue; } break; } }
/// <summary> /// Determines if the specified <see cref="MeteringMode" /> is one of the defined enumerations. This method is more efficient than using /// <see cref="Enum.IsDefined" />, since <see cref="Enum.IsDefined" /> uses reflection. /// </summary> /// <param name="meteringMode">An instance of <see cref="MeteringMode" /> to test.</param> /// <returns>Returns true if <paramref name="meteringMode"/> is one of the defined items in the enumeration; otherwise returns false.</returns> public static bool IsValidMeteringMode(MeteringMode meteringMode) { switch (meteringMode) { case MeteringMode.Average: case MeteringMode.CenterWeightedAverage: case MeteringMode.MultiSpot: case MeteringMode.Other: case MeteringMode.Partial: case MeteringMode.Pattern: case MeteringMode.Spot: case MeteringMode.Unknown: break; default: return false; } return true; }