⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 z_exif.asp

📁 一个网络相册
💻 ASP
📖 第 1 页 / 共 3 页
字号:
		Dim Processed_ExifSubIFD
		Dim BytesPerComponent
		Dim Offset_to_MakerNote
		Dim i, j, k
	
		Do
			If IsIntel Then
				No_of_Entries = ByteToInt(ExifTemp(Offset + 1), ExifTemp(Offset + 0))
			Else
				No_of_Entries = ByteToInt(ExifTemp(Offset + 0), ExifTemp(Offset + 1))
			End If
			On Error Resume Next
			Upper_IFDDirectory = UBound(IFDDirectory)
			On Error GoTo 0
			NewDimensions = Upper_IFDDirectory + No_of_Entries
			ReDim Preserve IFDDirectory(NewDimensions)
			For i = 1 To No_of_Entries
				k = Upper_IFDDirectory + i - 1
				IFDDirectory(k) = array(null,null,null,null,null,null,null)
				If IsIntel Then
					IFDDirectory(k)(IFD_IDX_Tag_No) = Hex0(ExifTemp((Offset + 2) + ((i - 1) * 12) + 1)) & Hex0(ExifTemp((Offset + 2) + ((i - 1) * 12) + 0))
					IFDDirectory(k)(IFD_IDX_Data_Format) = ByteToInt(ExifTemp((Offset + 2) + ((i - 1) * 12) + 3), ExifTemp((Offset + 2) + ((i - 1) * 12) + 2))
					IFDDirectory(k)(IFD_IDX_Components) = ByteToLong(ExifTemp((Offset + 2) + ((i - 1) * 12) + 7), ExifTemp((Offset + 2) + ((i - 1) * 12) + 6), ExifTemp((Offset + 2) + ((i - 1) * 12) + 5), ExifTemp((Offset + 2) + ((i - 1) * 12) + 4))
					Select Case IFDDirectory(k)(IFD_IDX_Data_Format)
					Case m_BYTE, m_SBYTE
						BytesPerComponent = 1
						If IFDDirectory(k)(IFD_IDX_Components) * BytesPerComponent <= 4 Then
							IFDDirectory(k)(IFD_IDX_OffsetToValue) = 0
							IFDDirectory(k)(IFD_IDX_Value) = ByteToByte((Offset + 2) + ((i - 1) * 12) + 8, (Offset + 2) + ((i - 1) * 12) + 8 + IFDDirectory(k)(IFD_IDX_Components) - 1)
						Else
							IFDDirectory(k)(IFD_IDX_OffsetToValue) = ByteToLong(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11), ExifTemp((Offset + 2) + ((i - 1) * 12) + 10), ExifTemp((Offset + 2) + ((i - 1) * 12) + 9), ExifTemp((Offset + 2) + ((i - 1) * 12) + 8))
							If Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) < UBound(ExifTemp) Then
								IFDDirectory(k)(IFD_IDX_Value) = ByteToByte(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue), Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + IFDDirectory(k)(IFD_IDX_Components) - 1)
							Else
								IFDDirectory(k)(IFD_IDX_Value) = "00"
							End if
						End If
					Case m_STRING, m_UNDEFINED
						BytesPerComponent = 1
						If IFDDirectory(k)(IFD_IDX_Components) * BytesPerComponent <= 4 Then
							IFDDirectory(k)(IFD_IDX_OffsetToValue) = 0
							IFDDirectory(k)(IFD_IDX_Value) = ByteToStr((Offset + 2) + ((i - 1) * 12) + 8, (Offset + 2) + ((i - 1) * 12) + 8 + IFDDirectory(k)(IFD_IDX_Components) - 1)
						Else
							IFDDirectory(k)(IFD_IDX_OffsetToValue) = ByteToLong(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11), ExifTemp((Offset + 2) + ((i - 1) * 12) + 10), ExifTemp((Offset + 2) + ((i - 1) * 12) + 9), ExifTemp((Offset + 2) + ((i - 1) * 12) + 8))
							If Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) < UBound(ExifTemp) Then
								IFDDirectory(k)(IFD_IDX_Value) = ByteToStr(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue), Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + IFDDirectory(k)(IFD_IDX_Components) - 1)
							Else
								IFDDirectory(k)(IFD_IDX_Value) = ""
							End if
						End If
					Case m_SHORT, m_SSHORT
						BytesPerComponent = 2
						If IFDDirectory(k)(IFD_IDX_Components) * BytesPerComponent <= 4 Then
							Select Case IFDDirectory(k)(IFD_IDX_Components)
							Case 1
								IFDDirectory(k)(IFD_IDX_Value) = ByteToInt(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9), ExifTemp((Offset + 2) + ((i - 1) * 12) + 8))
							Case 2
								IFDDirectory(k)(IFD_IDX_Value) = ByteToInt(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11), ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)) + ByteToInt(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9), ExifTemp((Offset + 2) + ((i - 1) * 12) + 8))
							End Select
							IFDDirectory(k)(IFD_IDX_OffsetToValue) = 0
						Else
							IFDDirectory(k)(IFD_IDX_OffsetToValue) = ByteToLong(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11), ExifTemp((Offset + 2) + ((i - 1) * 12) + 10), ExifTemp((Offset + 2) + ((i - 1) * 12) + 9), ExifTemp((Offset + 2) + ((i - 1) * 12) + 8))
							If Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) < UBound(ExifTemp) Then
								IFDDirectory(k)(IFD_IDX_Value) = ByteToByte(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue), Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + IFDDirectory(k)(IFD_IDX_Components) - 1)
							Else
								IFDDirectory(k)(IFD_IDX_Value) = 0
							End if
						End If
					Case m_LONG, m_SLONG
						BytesPerComponent = 4
						If IFDDirectory(k)(IFD_IDX_Components) * BytesPerComponent <= 4 Then
							IFDDirectory(k)(IFD_IDX_Value) = ByteToLong(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11), ExifTemp((Offset + 2) + ((i - 1) * 12) + 10), ExifTemp((Offset + 2) + ((i - 1) * 12) + 9), ExifTemp((Offset + 2) + ((i - 1) * 12) + 8))
							IFDDirectory(k)(IFD_IDX_OffsetToValue) = 0
						Else
							IFDDirectory(k)(IFD_IDX_OffsetToValue) = ByteToLong(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11), ExifTemp((Offset + 2) + ((i - 1) * 12) + 10), ExifTemp((Offset + 2) + ((i - 1) * 12) + 9), ExifTemp((Offset + 2) + ((i - 1) * 12) + 8))
							If Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) < UBound(ExifTemp) Then
								IFDDirectory(k)(IFD_IDX_Value) = ByteToByte(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue), Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + IFDDirectory(k)(IFD_IDX_Components) - 1)
							Else
								IFDDirectory(k)(IFD_IDX_Value) = 0
							End if
						End If
					Case m_RATIONAL, m_SRATIONAL
						BytesPerComponent = 8
						IFDDirectory(k)(IFD_IDX_OffsetToValue) = ByteToLong(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11), ExifTemp((Offset + 2) + ((i - 1) * 12) + 10), ExifTemp((Offset + 2) + ((i - 1) * 12) + 9), ExifTemp((Offset + 2) + ((i - 1) * 12) + 8))
						If Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) < UBound(ExifTemp) Then
							IFDDirectory(k)(IFD_IDX_Value) = ByteToLong(ExifTemp(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + 3), ExifTemp(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + 2), ExifTemp(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + 1), ExifTemp(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + 0)) & "/" & ByteToLong(ExifTemp(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + 7), ExifTemp(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + 6), ExifTemp(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + 5), ExifTemp(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + 4))
						Else
							IFDDirectory(k)(IFD_IDX_Value) = "0/0"
						End If
					End Select
				Else
					IFDDirectory(k)(IFD_IDX_Tag_No) = Hex0(ExifTemp((Offset + 2) + ((i - 1) * 12) + 0)) & Hex0(ExifTemp((Offset + 2) + ((i - 1) * 12) + 1))
					IFDDirectory(k)(IFD_IDX_Data_Format) = ByteToInt(ExifTemp((Offset + 2) + ((i - 1) * 12) + 2), ExifTemp((Offset + 2) + ((i - 1) * 12) + 3))
					IFDDirectory(k)(IFD_IDX_Components) = ByteToLong(ExifTemp((Offset + 2) + ((i - 1) * 12) + 4), ExifTemp((Offset + 2) + ((i - 1) * 12) + 5), ExifTemp((Offset + 2) + ((i - 1) * 12) + 6), ExifTemp((Offset + 2) + ((i - 1) * 12) + 7))
					Select Case IFDDirectory(k)(IFD_IDX_Data_Format)
					Case m_BYTE, m_SBYTE
						BytesPerComponent = 1
						If IFDDirectory(k)(IFD_IDX_Components) * BytesPerComponent <= 4 Then
							IFDDirectory(k)(IFD_IDX_OffsetToValue) = 0
							IFDDirectory(k)(IFD_IDX_Value) = ByteToByte((Offset + 2) + ((i - 1) * 12) + 8, (Offset + 2) + ((i - 1) * 12) + 8 + IFDDirectory(k)(IFD_IDX_Components) - 1)
						Else
							IFDDirectory(k)(IFD_IDX_OffsetToValue) = ByteToLong(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8), ExifTemp((Offset + 2) + ((i - 1) * 12) + 9), ExifTemp((Offset + 2) + ((i - 1) * 12) + 10), ExifTemp((Offset + 2) + ((i - 1) * 12) + 11))
							If Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) < UBound(ExifTemp) Then
								IFDDirectory(k)(IFD_IDX_Value) = ByteToByte(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue), Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + IFDDirectory(k)(IFD_IDX_Components) - 1)
							Else
								IFDDirectory(k)(IFD_IDX_Value) = "00"
							End If
						End If
					Case m_STRING, m_UNDEFINED
						BytesPerComponent = 1
						If IFDDirectory(k)(IFD_IDX_Components) * BytesPerComponent <= 4 Then
							IFDDirectory(k)(IFD_IDX_OffsetToValue) = 0
							IFDDirectory(k)(IFD_IDX_Value) = ByteToStr((Offset + 2) + ((i - 1) * 12) + 8, (Offset + 2) + ((i - 1) * 12) + 8 + IFDDirectory(k)(IFD_IDX_Components) - 1)
						Else
							IFDDirectory(k)(IFD_IDX_OffsetToValue) = ByteToLong(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8), ExifTemp((Offset + 2) + ((i - 1) * 12) + 9), ExifTemp((Offset + 2) + ((i - 1) * 12) + 10), ExifTemp((Offset + 2) + ((i - 1) * 12) + 11))
							If Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) < UBound(ExifTemp) Then
								IFDDirectory(k)(IFD_IDX_Value) = ByteToStr(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue), Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + IFDDirectory(k)(IFD_IDX_Components) - 1)
							Else
								IFDDirectory(k)(IFD_IDX_Value) = ""
							End If
						End If
					Case m_SHORT, m_SSHORT
						BytesPerComponent = 2
						If IFDDirectory(k)(IFD_IDX_Components) * BytesPerComponent <= 4 Then
							Select Case IFDDirectory(k)(IFD_IDX_Components)
							Case 1
								IFDDirectory(k)(IFD_IDX_Value) = ByteToInt(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8), ExifTemp((Offset + 2) + ((i - 1) * 12) + 9))
							Case 2
								IFDDirectory(k)(IFD_IDX_Value) = ByteToInt(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8), ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)) + ByteToInt(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10), ExifTemp((Offset + 2) + ((i - 1) * 12) + 11))
							End Select
							IFDDirectory(k)(IFD_IDX_OffsetToValue) = 0
						Else
							IFDDirectory(k)(IFD_IDX_OffsetToValue) = ByteToLong(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8), ExifTemp((Offset + 2) + ((i - 1) * 12) + 9), ExifTemp((Offset + 2) + ((i - 1) * 12) + 10), ExifTemp((Offset + 2) + ((i - 1) * 12) + 11))
							If Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) < UBound(ExifTemp) Then
								IFDDirectory(k)(IFD_IDX_Value) = ByteToByte(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + IFDDirectory(k)(IFD_IDX_Components) - 1, Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue))
							Else
								IFDDirectory(k)(IFD_IDX_Value) = 0
							End If
						End If
					Case m_LONG, m_SLONG
						BytesPerComponent = 4
						If IFDDirectory(k)(IFD_IDX_Components) * BytesPerComponent <= 4 Then
							IFDDirectory(k)(IFD_IDX_Value) = ByteToLong(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8), ExifTemp((Offset + 2) + ((i - 1) * 12) + 9), ExifTemp((Offset + 2) + ((i - 1) * 12) + 10), ExifTemp((Offset + 2) + ((i - 1) * 12) + 11))
							IFDDirectory(k)(IFD_IDX_OffsetToValue) = 0
						Else
							IFDDirectory(k)(IFD_IDX_OffsetToValue) = ByteToLong(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8), ExifTemp((Offset + 2) + ((i - 1) * 12) + 9), ExifTemp((Offset + 2) + ((i - 1) * 12) + 10), ExifTemp((Offset + 2) + ((i - 1) * 12) + 11))
							If Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) < UBound(ExifTemp) Then
								IFDDirectory(k)(IFD_IDX_Value) = ByteToByte(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + IFDDirectory(k)(IFD_IDX_Components) - 1, Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue))
							Else
								IFDDirectory(k)(IFD_IDX_Value) = 0
							End If
						End If
					Case m_RATIONAL, m_SRATIONAL
						BytesPerComponent = 8
						IFDDirectory(k)(IFD_IDX_OffsetToValue) = ByteToLong(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8), ExifTemp((Offset + 2) + ((i - 1) * 12) + 9), ExifTemp((Offset + 2) + ((i - 1) * 12) + 10), ExifTemp((Offset + 2) + ((i - 1) * 12) + 11))
						If Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) < UBound(ExifTemp) Then
							IFDDirectory(k)(IFD_IDX_Value) = ByteToLong(ExifTemp(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + 0), ExifTemp(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + 1), ExifTemp(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + 2), ExifTemp(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + 3)) & "/" & ByteToLong(ExifTemp(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + 4), ExifTemp(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + 5), ExifTemp(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + 6), ExifTemp(Offset_to_TIFF + IFDDirectory(k)(IFD_IDX_OffsetToValue) + 7))
						Else
							IFDDirectory(k)(IFD_IDX_Value) = "0/0"
						End If
					End Select
				End If
				If IFDDirectory(k)(IFD_IDX_Tag_No) = MakerNote Then
					Offset_to_MakerNote = IFDDirectory(k)(IFD_IDX_OffsetToValue)
				End If
				If IFDDirectory(k)(IFD_IDX_Tag_No) = ExifOffset Then
					Offset_to_ExifSubIFD = CLng(IFDDirectory(k)(IFD_IDX_Value))
				End If
				IFDDirectory(k)(IFD_IDX_Tag_Name) = LookupExifTag(IFDDirectory(k)(IFD_IDX_Tag_No))
			Next
			If IsIntel Then
				If Not Processed_ExifSubIFD Then
					Offset_to_Next_IFD = ByteToLong(ExifTemp(Offset + 2 + (No_of_Entries * 12) + 3), ExifTemp(Offset + 2 + (No_of_Entries * 12) + 2), ExifTemp(Offset + 2 + (No_of_Entries * 12) + 1), ExifTemp(Offset + 2 + (No_of_Entries * 12) + 0))
				Else
					Offset_to_Next_IFD = 0
				End If
			Else
				If Not Processed_ExifSubIFD Then
					Offset_to_Next_IFD = ByteToLong(ExifTemp(Offset + 2 + (No_of_Entries * 12) + 0), ExifTemp(Offset + 2 + (No_of_Entries * 12) + 1), ExifTemp(Offset + 2 + (No_of_Entries * 12) + 2), ExifTemp(Offset + 2 + (No_of_Entries * 12) + 3))
				Else
					Offset_to_Next_IFD = 0
				End If
			End If
			If Offset_to_Next_IFD = 0 And Processed_ExifSubIFD = False Then
				Offset_to_Next_IFD = Offset_to_ExifSubIFD
				Processed_ExifSubIFD = True
			ElseIf Processed_ExifSubIFD = False Then
				If Offset_to_TIFF + Offset_to_Next_IFD + 2 > UBound(ExifTemp) Then
					Offset_to_Next_IFD = Offset_to_ExifSubIFD
					Processed_ExifSubIFD = True
				End If
			End If
			Offset = Offset_to_TIFF + Offset_to_Next_IFD
		Loop While Offset_to_Next_IFD <> 0
		If Offset_to_MakerNote <> 0 Then
			'ProcessMakerNote Offset_to_MakerNote + Offset_to_TIFF
		End If
	End Sub
	
	Private Function Hex0(nValue)
		Hex0 = Right("00" & Hex(nValue), 2)
	End Function
	
	Private Function ByteToInt(Byte1, Byte2)
		If Byte1 < 128 Then
			ByteToInt = Byte1 * 256 + Byte2
		Else
			ByteToInt = Byte2 - (256 - Byte1) * 256
		End If
	End Function
	
	Private Function ByteToLong(Byte1, Byte2, Byte3, Byte4)
		If Byte1 < 128 Then
			ByteToLong = ((Byte1 * 256 + Byte2) * 256 + Byte3) * 256 + Byte4
		Else
			ByteToLong = Byte4 - (((256 - Byte1) * 256 - Byte2) * 256 - Byte3) * 256
		End If
	End Function

	Private Function ByteToStr(StartOffset, EndOffset)
		Dim i
		
		ByteToStr = ""
		If StartOffset > EndOffset Then
			For i = StartOffset To EndOffset Step -1
				If ExifTemp(i) = 0 Then Exit For
				If i > EndOffset Then
					If ExifTemp(i) >= 128 and ExifTemp(i - 1) >= 128 Then
						ByteToStr = ByteToStr & Chr(ByteToInt(ExifTemp(i), ExifTemp(StartOffset + i - 1)))
						i = i - 1
					Else
						ByteToStr = ByteToStr & Chr(ExifTemp(i))
					End If
				Else
					ByteToStr = ByteToStr & Chr(ExifTemp(i))
				End If
			Next
		Else
			For i = StartOffset To EndOffset
				If ExifTemp(i) = 0 Then Exit For
				If i < EndOffset Then
					If ExifTemp(i) >= 128 and ExifTemp(i + 1) >= 128 Then
						ByteToStr = ByteToStr & Chr(ByteToInt(ExifTemp(i), ExifTemp(i + 1)))
						i = i + 1
					Else
						ByteToStr = ByteToStr & Chr(ExifTemp(i))
					End If
				Else
					ByteToStr = ByteToStr & Chr(ExifTemp(i))
				End If
			Next
		End If
	End Function
	
	Private Function ByteToByte(StartOffset, EndOffset)
		Dim i
		
		ByteToByte = ""
		If StartOffset > EndOffset Then
			For i = StartOffset To EndOffset Step -1
				If ByteToByte <> "" Then ByteToByte = ByteToByte & " "
				ByteToByte = ByteToByte & Hex0(ExifTemp(i))
			Next
		Else
			For i = StartOffset To EndOffset
				If ByteToByte <> "" Then ByteToByte = ByteToByte & " "
				ByteToByte = ByteToByte & Hex0(ExifTemp(i))
			Next
		End If
	End Function

	Private Function MakeSenseOfMeaninglessValues()
		Dim x
		Dim TagValues
		
		For x = 0 To ubound(IFDDirectory) - 1
			Select Case IFDDirectory(x)(IFD_IDX_Tag_Name)
			Case "Orientation"
				TagValues = array("未知","上左","上右", "下右", "下左", "左上", "右上", "右下", "左下")
				If IFDDirectory(x)(IFD_IDX_Value)>=0 and IFDDirectory(x)(IFD_IDX_Value)<ubound(TagValues) Then
					IFDDirectory(x)(IFD_IDX_Value_Desc) = TagValues(IFDDirectory(x)(IFD_IDX_Value))
				Else
					IFDDirectory(x)(IFD_IDX_Value_Desc) = "未知"
				End if
			Case "Metering Mode"
				TagValues = array("未知","平均","偏中心平均", "点", "多点", "图案", "部分")
				If IFDDirectory(x)(IFD_IDX_Value)>=0 and IFDDirectory(x)(IFD_IDX_Value)<ubound(TagValues) Then
					IFDDirectory(x)(IFD_IDX_Value_Desc) = TagValues(IFDDirectory(x)(IFD_IDX_Value))
				Else
					IFDDirectory(x)(IFD_IDX_Value_Desc) = "未知"
				End if
			Case "FStop"
				TagValues = Split(IFDDirectory(x)(IFD_IDX_Value), "/")
				If UBound(TagValues) = 1 Then
					If CLng(TagValues(1))<>0 Then
						If (CLng(TagValues(0)) Mod CLng(TagValues(1))) = 0 Then
							IFDDirectory(x)(IFD_IDX_Value_Desc) = "F/" & (CLng(TagValues(0)) \ CLng(TagValues(1)))
						Else
							IFDDirectory(x)(IFD_IDX_Value_Desc) = "F/" & Round(CLng(TagValues(0)) / CLng(TagValues(1)),1)
						End If
					End If
				End if
			Case "Exposure Time"
				TagValues = Split(IFDDirectory(x)(IFD_IDX_Value), "/")
				If UBound(TagValues) = 1 Then
					If CLng(TagValues(1))<>0 Then
						If CLng(TagValues(1)) > CLng(TagValues(0)) Then
							If (CLng(TagValues(1)) Mod CLng(TagValues(0))) = 0 Then
								IFDDirectory(x)(IFD_IDX_Value_Desc) = "1/" & (CLng(TagValues(1)) \ CLng(TagValues(0))) & " 秒"
							Else
								IFDDirectory(x)(IFD_IDX_Value_Desc) = "1/" & Round(CLng(TagValues(1)) / CLng(TagValues(0)),1) & " 秒"
							End If
						Else
							If (CLng(TagValues(0)) Mod CLng(TagValues(1))) = 0 Then
								IFDDirectory(x)(IFD_IDX_Value_Desc) = CLng(TagValues(0)) \ CLng(TagValues(1)) & " 秒"
							Else
								IFDDirectory(x)(IFD_IDX_Value_Desc) = Round(CLng(TagValues(0)) / CLng(TagValues(1)),1) & " 秒"
							End If
						End if
					End if
				End if
			Case "Flash"
				If (IFDDirectory(x)(IFD_IDX_Value) Mod 2) = 0 Then
					IFDDirectory(x)(IFD_IDX_Value_Desc) = "关"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -