以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 如何获取照片的拍摄时间 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=114984) |
-- 作者:rjh4078 -- 发布时间:2018/2/27 10:44:00 -- 如何获取照片的拍摄时间 如题 发现fileinfo获取的创建时间和照片的实际拍摄时间差距很大,如何获取照片的拍摄时间? |
-- 作者:有点甜 -- 发布时间:2018/2/27 11:12:00 -- 参考
http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=78730&replyID=&skin=1
|
-- 作者:rjh4078 -- 发布时间:2018/2/27 12:35:00 -- 这个老是提示内存不足 |
-- 作者:rjh4078 -- 发布时间:2018/2/27 12:49:00 -- 每获取10-20张照片时就提示内存不足 我这里有10万张照片 |
-- 作者:rjh4078 -- 发布时间:2018/2/27 12:54:00 -- For Each r As Row In Tables("图片库") If r("扩展名")=".JPG" AndAlso r.Isnull("拍摄时间") Then Dim img As Image = Image.FromFile(r("路径")) Dim pt As PropertyItem() = img.PropertyItems For i As Integer = 0 To pt.Length - 1 Dim p As PropertyItem = pt(i) Select Case pt(i).Id \'Case &H132 \'Dim s As String = System.Text.Encoding.ASCII.GetString(p.value) \'Output.Show("修改时间: " & s) \'Output.Show("") Case &H9003 Dim s As String = System.Text.Encoding.ASCII.GetString(p.value) ‘Output.Show(r.Index & "拍摄时间: " & s) ’Output.Show("") r("拍摄时间")=s \'Case &H110 \'Dim s As String = System.Text.Encoding.ASCII.GetString(p.value) \'Output.Show("相机型号: " & s) \'Output.Show("") \'Case &H10F \'Dim s As String = System.Text.Encoding.ASCII.GetString(p.value) \'Output.Show("制造商: " & s) \'Output.Show("") \' \'Case &H131 \'Dim s As String = System.Text.Encoding.ASCII.GetString(p.value) \'Output.Show("修改软件: " & s) \'Output.Show("") End Select Next End If Next |
-- 作者:rjh4078 -- 发布时间:2018/2/27 12:56:00 -- 8G内存 报错时内存还有60% |
-- 作者:有点甜 -- 发布时间:2018/2/27 14:19:00 -- 试试
For Each r As Row In Tables("图片库")
If r("扩展名")=".JPG" AndAlso r.Isnull("拍摄时间") Then
Dim img As Image = Image.FromFile(r("路径"))
Dim pt As PropertyItem() = img.PropertyItems
For i As Integer = 0 To pt.Length - 1
Dim p As PropertyItem = pt(i)
Select Case pt(i).Id
\'Case &H132
\'Dim s As String = System.Text.Encoding.ASCII.GetString(p.value)
\'Output.Show("修改时间: " & s)
\'Output.Show("")
Case &H9003
Dim s As String = System.Text.Encoding.ASCII.GetString(p.value)
‘Output.Show(r.Index & "拍摄时间: " & s)
’Output.Show("")
r("拍摄时间")=s
\'Case &H110
\'Dim s As String = System.Text.Encoding.ASCII.GetString(p.value)
\'Output.Show("相机型号: " & s)
\'Output.Show("")
\'Case &H10F
\'Dim s As String = System.Text.Encoding.ASCII.GetString(p.value)
\'Output.Show("制造商: " & s)
\'Output.Show("")
\'
\'Case &H131
\'Dim s As String = System.Text.Encoding.ASCII.GetString(p.value)
\'Output.Show("修改软件: " & s)
\'Output.Show("")
End Select
Next
img.dispose
End If
Next
|
-- 作者:rjh4078 -- 发布时间:2018/2/27 20:03:00 -- 现在可以了 有个新问题 如何用多线程来运行这个代码? 我想把10万张分成100个线程来处理,现在这个会导致程序卡死无响应。 |
-- 作者:有点蓝 -- 发布时间:2018/2/27 20:39:00 -- http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=80299&replyID=&skin=1 |
-- 作者:有点甜 -- 发布时间:2018/2/28 10:08:00 -- 以下是引用rjh4078在2018/2/27 20:03:00的发言:
现在可以了 有个新问题 如何用多线程来运行这个代码? 我想把10万张分成100个线程来处理,现在这个会导致程序卡死无响应。
建议还是这样写代码,处理的时候,加上 Application.DoEvents 应该就可以了,如
For i As Integer = 1 To 1000 |