以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何获取照片的拍摄时间  (http://foxtable.net/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
    CurrentTable.addnew
    Application.DoEvents
Next