解决方案 »
- 紧急求助,控件注册不上怎么回事?
- 实用批处理一个
- VB MSComm 读取数据问题,急!!
- VB COMBOBOX问题
- 谁能帮我把这个VB6+ADO的源程序改写成功能相同的VB.NET+ADO.NET的源程序?
- VB:如何调用带有游标的存储过程???
- 如何减少Vb60编译后可执行文件的大小?
- 高手请进!谢谢!!用ado.recordset 的 updatebatch 保存修改时出错,提示无法为更新定位行,一些值可能在最后一次已更改。
- 求助:小弟想用VB做一个日期条,请各位大大帮忙看下,谢谢!
- 想控制,好难!--不听话的输入法!
- vb注入机器指令问题求解
- excel 某一区域内任意两个单元格距离问题
sPad = String(nSize - Len(sSrc), sPadChar) & sSrc
Else
sPad = sSrc
End If
End FunctionPrivate Sub GetDirectoryEntries(Offset As Long)
Dim No_of_Entries As Long
Dim Upper_IFDDirectory As Long
Dim NewDimensions As Long
Dim Processed_ExifSubIFD As Boolean
Dim BytesPerComponent As Long
Dim Offset_to_MakerNote As Long
Dim i As Long, j As Long
Do
If IsIntel Then
No_of_Entries = _
ExifTemp(Offset + 1) * 256& + _
ExifTemp(Offset + 0)
Else
No_of_Entries = _
ExifTemp(Offset + 0) * 256& + _
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(1 To NewDimensions) As IFD_Data
For i = 1 To No_of_Entries
With IFDDirectory(Upper_IFDDirectory + i)
If IsIntel Then .Tag_No = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 1) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 0)
.Data_Format = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 3) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 2)
.Components = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 7) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 6) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 5) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 4)
Select Case .Data_Format
Case m_BYTE, m_SBYTE
BytesPerComponent = 1
If .Components * BytesPerComponent <= 4 Then
.value = _
sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)), 2, "0") & _
sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)), 2, "0") & _
sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)), 2, "0") & _
sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)), 2, "0")
Else
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)
For j = 0 To .Components - 1
.value = .value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)
Next
End If
Case m_STRING, m_UNDEFINED
BytesPerComponent = 1
If .Components * BytesPerComponent <= 4 Then
.value = _
Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)) & _
Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)) & _
Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)) & _
Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8))
Else
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)
For j = 0 To .Components - 2
.value = .value & Chr(ExifTemp(Offset_to_TIFF + .Offset_To_Value + j))
Next
End If
Case m_SHORT, m_SSHORT
BytesPerComponent = 2
If .Components * BytesPerComponent <= 4 Then
.value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)
'.Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)
Else
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)
For j = 0 To .Components - 1
.value = .value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)
Next
End If
Case m_LONG, m_SLONG
BytesPerComponent = 4
If .Components * BytesPerComponent <= 4 Then
.value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)
Else
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)
For j = 0 To .Components - 1
.value = .value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)
Next
End If
Case m_RATIONAL, m_SRATIONAL
BytesPerComponent = 8
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)
.value = _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 3) * 256& * 256& * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 2) * 256& * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 1) * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 0) & _
"/" & _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 7) * 256& * 256& * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 6) * 256& * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 5) * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 4)
End Select
Else
.Tag_No = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 0) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 1)
.Data_Format = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 2) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 3)
.Components = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 4) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 5) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 6) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 7)
Select Case .Data_Format
Case m_BYTE, m_SBYTE
BytesPerComponent = 1
If .Components * BytesPerComponent <= 4 Then
.value = _
sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)), 2, "0") & _
sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)), 2, "0") & _
sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)), 2, "0") & _
sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)), 2, "0")
Else
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)
For j = 0 To .Components - 1
.value = .value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)
Next
End If
Case m_STRING, m_UNDEFINED
BytesPerComponent = 1
If .Components * BytesPerComponent <= 4 Then
.value = _
Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)) & _
Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)) & _
Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)) & _
Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11))
Else
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)
For j = 0 To .Components - 1
.value = .value & Chr(ExifTemp(Offset_to_TIFF + .Offset_To_Value + j))
Next
End If
BytesPerComponent = 2
If .Components * BytesPerComponent <= 4 Then
.value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)
Else
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)
For j = .Components - 1 To 0 Step -1
.value = .value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)
Next
End If
Case m_LONG, m_SLONG
BytesPerComponent = 4
If .Components * BytesPerComponent <= 4 Then
.value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)
Else
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)
For j = 0 To .Components - 1
.value = .value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)
Next
End If
Case m_RATIONAL, m_SRATIONAL
BytesPerComponent = 8
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)
.value = _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 0) * 256& * 256& * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 1) * 256& * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 2) * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 3) & _
"/" & _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 4) * 256& * 256& * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 5) * 256& * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 6) * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 7)
End Select
End If
'Debug.Print Upper_IFDDirectory + i & ".Tag_No: " & .Tag_No & _
"; .Data_Format: " & .Data_Format & _
"; .Components: " & .Components & _
"; .Offset_To_Value: " & .Offset_To_Value & _
"; .Value: " & .Value
If .Tag_No = MakerNote Then
Offset_to_MakerNote = .Offset_To_Value
End If
If .Tag_No = ExifOffset Then
Offset_to_ExifSubIFD = CLng(.value)
'Debug.Print "Offset_to_ExifSubIFD: " & Offset_to_ExifSubIFD
End If
End With
Next
If IsIntel Then
If Not Processed_ExifSubIFD Then
Offset_to_Next_IFD = _
ExifTemp(Offset + 2 + (No_of_Entries * 12) + 3) * 256& * 256& * 256& + _
ExifTemp(Offset + 2 + (No_of_Entries * 12) + 2) * 256& * 256& + _
ExifTemp(Offset + 2 + (No_of_Entries * 12) + 1) * 256& + _
ExifTemp(Offset + 2 + (No_of_Entries * 12) + 0)
'Debug.Print "Offset_to_Next_IFD: " & Offset_to_Next_IFD
Else
Offset_to_Next_IFD = 0
End If
Else
If Not Processed_ExifSubIFD Then
Offset_to_Next_IFD = _
ExifTemp(Offset + 2 + (No_of_Entries * 12) + 0) * 256& * 256& * 256& + _
ExifTemp(Offset + 2 + (No_of_Entries * 12) + 1) * 256& * 256& + _
ExifTemp(Offset + 2 + (No_of_Entries * 12) + 2) * 256& + _
ExifTemp(Offset + 2 + (No_of_Entries * 12) + 3)
'Debug.Print "Offset_to_Next_IFD: " & Offset_to_Next_IFD
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
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 SubPrivate Sub ProcessMakerNote(ByVal Offset As Long)
Dim No_of_Entries As Long
Dim Upper_IFDDirectory As Long
Dim NewDimensions As Long
Dim BytesPerComponent As Long
Dim i As Long, j As Long
If IsIntel Then
No_of_Entries = _
ExifTemp(Offset + 1) * 256& + _
ExifTemp(Offset + 0)
Else
No_of_Entries = _
ExifTemp(Offset + 0) * 256& + _
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(1 To NewDimensions) As IFD_Data
For i = 1 To No_of_Entries
With IFDDirectory(Upper_IFDDirectory + i)
If IsIntel Then .Tag_No = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 1) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 0)
.MakerNote = True
.Data_Format = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 3) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 2)
.Components = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 7) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 6) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 5) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 4)
Select Case .Data_Format
Case m_BYTE, m_SBYTE
BytesPerComponent = 1
If .Components * BytesPerComponent <= 4 Then
.value = _
sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)), 2, "0") & _
sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)), 2, "0") & _
sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)), 2, "0") & _
sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)), 2, "0")
Else
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)
For j = 0 To .Components - 1
.value = .value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)
Next
End If
Case m_STRING, m_UNDEFINED
BytesPerComponent = 1
If .Components * BytesPerComponent <= 4 Then
.value = _
Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)) & _
Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)) & _
Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)) & _
Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8))
Else
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)
For j = 0 To .Components - 2
.value = .value & Chr(ExifTemp(Offset_to_TIFF + .Offset_To_Value + j))
Next
End If
BytesPerComponent = 2
If .Components * BytesPerComponent <= 4 Then
.value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)
'.Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)
Else
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)
For j = 0 To .Components - 1
.value = .value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)
Next
End If
Case m_LONG, m_SLONG
BytesPerComponent = 4
If .Components * BytesPerComponent <= 4 Then
.value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)
Else
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)
For j = 0 To .Components - 1
.value = .value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)
Next
End If
Case m_RATIONAL, m_SRATIONAL
BytesPerComponent = 8
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)
.value = _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 3) * 256& * 256& * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 2) * 256& * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 1) * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 0) & _
"/" & _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 7) * 256& * 256& * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 6) * 256& * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 5) * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 4)
End Select
Else
.Tag_No = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 0) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 1)
.Data_Format = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 2) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 3)
.Components = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 4) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 5) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 6) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 7)
Select Case .Data_Format
Case m_BYTE, m_SBYTE
BytesPerComponent = 1
If .Components * BytesPerComponent <= 4 Then
.value = _
sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)), 2, "0") & _
sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)), 2, "0") & _
sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)), 2, "0") & _
sPad(Hex(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)), 2, "0")
Else
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)
For j = 0 To .Components - 1
.value = .value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)
Next
End If
Case m_STRING, m_UNDEFINED
BytesPerComponent = 1
If .Components * BytesPerComponent <= 4 Then
.value = _
Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 8)) & _
Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 9)) & _
Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 10)) & _
Chr(ExifTemp((Offset + 2) + ((i - 1) * 12) + 11))
Else
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)
For j = 0 To .Components - 1
.value = .value & Chr(ExifTemp(Offset_to_TIFF + .Offset_To_Value + j))
Next
End If
Case m_SHORT, m_SSHORT
BytesPerComponent = 2
If .Components * BytesPerComponent <= 4 Then
.value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)
Else
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)
For j = .Components - 1 To 0 Step -1
.value = .value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)
Next
End If
Case m_LONG, m_SLONG
BytesPerComponent = 4
If .Components * BytesPerComponent <= 4 Then
.value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)
Else
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)
For j = 0 To .Components - 1
.value = .value & ExifTemp(Offset_to_TIFF + .Offset_To_Value + j)
Next
End If
Case m_RATIONAL, m_SRATIONAL
BytesPerComponent = 8
.Offset_To_Value = _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 8) * 256& * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 9) * 256& * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 10) * 256& + _
ExifTemp((Offset + 2) + ((i - 1) * 12) + 11)
.value = _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 0) * 256& * 256& * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 1) * 256& * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 2) * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 3) & _
"/" & _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 4) * 256& * 256& * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 5) * 256& * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 6) * 256& + _
ExifTemp(Offset_to_TIFF + .Offset_To_Value + 7)
End Select
End If
End With
Next
End Sub
exif1.Tag(author) =space(10)2.即使类似以上方式,给字段值分别用空格取代后,看似exif信息全部清除了,但是当我尝试手工到该jpg图片文件中修改任意一个属性后会提示:一个意外错误是您无法对该文件应用属性,就是不能再修改这个文件的exif信息,这个图片文件相当于不能再动了,非常奇怪!求助有兴趣的朋友大家一起研究。
If IsLoaded = False And m_file <> "" Then
Load (m_file)
ElseIf IsLoaded = False And m_file = "" Then
Exit Property
End If
If ExifTag = 0 Then
On Error Resume Next
Tag = UBound(IFDDirectory)
On Error GoTo 0
Exit Property
End If
Dim i As Long
For i = 1 To UBound(IFDDirectory) '这里下标越界
If IFDDirectory(i).Tag_No = ExifTag Then
Tag = IFDDirectory(i).value
Exit For
End If
NextEnd Property
但是 为何我循环调用 只能显示第一次 load的 图片的 拍照时间有知道解决方案的没啊????????
Dim ex As ExifReader
For i=1 to 20
Set ex=Nothing
Set ex=New ExifReader
ex.Load("C:/" & i & ".jpg")
ex.Tag(DateTimeDigitized) = Now '修改
Next
Set ex=Nothing