Leudassdf Posted July 14, 2012 at 11:47 AM Report Share #468656 Posted July 14, 2012 at 11:47 AM Boas pessoal eu tenho o seguinte codigo embutido num timer: Dim Imgt As New Bitmap(116, 57) Dim g As Graphics = Graphics.FromImage(Imgt) g.CopyFromScreen(24, 205, 0, 0, Imgt.Size) 'System.IO.File.Delete("C:\Users\Leandro\Dropbox\Projecto para casino\Imagens\apostaterminada\2.jpg") If IO.File.Exists("C:\Users\Leandro\Desktop\apostaterminada\2.jpg") Then IO.File.Delete("C:\Users\Leandro\Desktop\apostaterminada\2.jpg") End If Imgt.Save("C:\Users\Leandro\Desktop\apostaterminada\2.jpg") o problema e que da-me sempre o seguinte erro: The process cannot access the file 'C:\Users\Leandro\Desktop\apostaterminada\2.jpg' because it is being used by another process. Mas eu so estou a usar esta imagem nesta parte do codigo. e nao ha mais nenhum programa que a esteja a usar. alguem sabe qual podera ser o problema? Link to comment Share on other sites More sharing options...
Lukas S. Posted July 14, 2012 at 01:21 PM Report Share #468658 Posted July 14, 2012 at 01:21 PM Só analizando o código inteiro é que poderemos ajudar ... E o Impossível foi criado por pessoas fracas pra acabar com o sonho das pessoas fortes. Não deixes que acabem com o teu. Sonha , luta , ambiciona e realiza. Se amas , se gostas tu vais conseguir. Cala todas as pessoas que um dia duvidaram de ti e prova que foste mais forte de qualquer outro. Link to comment Share on other sites More sharing options...
Leudassdf Posted July 14, 2012 at 04:19 PM Author Report Share #468664 Posted July 14, 2012 at 04:19 PM Só analizando o código inteiro é que poderemos ajudar ... Lukas O programa tem como objectivo ao fazer o printscreen de uma determinada localizaçao, verificar se a mesma é igual a uma imagem que tenho no computador. Eu tenho um timer que esta sempre a copiar as imagens e a verifica-las mas o que acontece e que na comparaçao da imagem ele dá sempre que a imagem e diferente mesmo sendo ela igual. Ainda nao consegui perceber o porque mas pronto. No entanto se eu a cada printscreen que fizer guardar essa imagem numa pasta e depois a comparar a verificaçao ja devolve o valor que a imagem e igual o que esta Correto! O codigo que eu tenho para comparar as imagens é : Public Class Form1 Public Function imagetobase64string(ByVal image As Image, ByVal format As Imaging.ImageFormat) As String Dim base64string = String.Empty Using memory As New IO.MemoryStream() image.Save(memory, format) base64string = Convert.ToBase64String(memory.ToArray()) End Using Return base64string End Function Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim bit As New Bitmap(100, 100) Dim g As Graphics = Graphics.FromImage(bit) g.CopyFromScreen(0, 0, 0, 0, bit.Size) Dim img2 As Image = Image.FromFile("C:\Users\Leandro\Desktop\teste.jpg") Dim BASETOSTRING1 As String = imagetobase64string(bit, Imaging.ImageFormat.Jpeg) Dim BASETOSTRING2 As String = imagetobase64string(img2, Imaging.ImageFormat.Jpeg) If BASETOSTRING1 = BASETOSTRING2 Then MsgBox("E") End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim bit As New Bitmap(100, 100) Dim g As Graphics = Graphics.FromImage(bit) g.CopyFromScreen(0, 0, 0, 0, bit.Size) bit.Save(My.Computer.FileSystem.SpecialDirectories.Desktop & "\teste.jpg") Timer1.Start() End Sub End Class Se alguem testar verifica que ele nao devolve a mensagem E mesmo que a imagem seja igual. Alguem sabe o porque? Como nao consegui verificar assim se consegui-se gravar a imagem numa pasta com o nome 2 e depois fosse comparar com imagem dessa pasta. Ai ja conseguiri-a que o programa retrna-se a Mensagem E. Mas o problema e que eu ja tenho uma imagem com o nome 2 como e apago essa imagem? e que com o codigo que tinha no comentario anterior o programa buga. Cumprimentos Public Class Form1 Public Function imagetobase64string(ByVal image As Image, ByVal format As Imaging.ImageFormat) As String Dim base64string = String.Empty Using memory As New IO.MemoryStream() image.Save(memory, format) base64string = Convert.ToBase64String(memory.ToArray()) End Using Return base64string End Function Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim bit As New Bitmap(100, 100) Dim g As Graphics = Graphics.FromImage(bit) g.CopyFromScreen(0, 0, 0, 0, bit.Size) bit.Save(My.Computer.FileSystem.SpecialDirectories.Desktop & "\teste2.jpg") Dim img2 As Image = Image.FromFile("C:\Users\Leandro\Desktop\teste.jpg") Dim img1 As Image = Image.FromFile("C:\Users\Leandro\Desktop\teste2.jpg") Dim BASETOSTRING1 As String = imagetobase64string(img1, Imaging.ImageFormat.Jpeg) Dim BASETOSTRING2 As String = imagetobase64string(img2, Imaging.ImageFormat.Jpeg) If BASETOSTRING1 = BASETOSTRING2 Then MsgBox("E") End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim bit As New Bitmap(100, 100) Dim g As Graphics = Graphics.FromImage(bit) g.CopyFromScreen(0, 0, 0, 0, bit.Size) bit.Save(My.Computer.FileSystem.SpecialDirectories.Desktop & "\teste.jpg") Timer1.Start() End Sub End Class se eu colocar assim ele ja diz que a imagem e igual o problema e que a segunda vez que passa pelo timer ele ao tentar guardar a imagem da erro pois ja existe uma imagem com o nome 2. Ele devera substituir a imagem 2 anterior por aquela que tirou agora. Eu ja tentei apagar a 2 e voltar a guardar com o mesmo nome mas depois da-me o erro que especifiquei no topico Cumprimentos Link to comment Share on other sites More sharing options...
Leudassdf Posted July 14, 2012 at 08:56 PM Author Report Share #468678 Posted July 14, 2012 at 08:56 PM problema resolvido. tive que fazer dispose as fotos e aos graphics Link to comment Share on other sites More sharing options...
Lukas S. Posted July 15, 2012 at 11:16 AM Report Share #468697 Posted July 15, 2012 at 11:16 AM (edited) Desculpa não tive por estas bandas ... Analisando assim o código eu acharia mesmo que era o dispose que faltava ai no timer ... se tás a verificar a imagem periodicamente e guardando nas mesmas variáveis vai dar asneira ... a outra solução que podias fazer era declarar as variáveis publicamente ( no inicio do código) e no timer colocavas Redim para redimensionar a variável mas acho que devias fazer algo melhor em relação a esse código ... não estou com o vb neste pc( estou de férias e estou a aceder pelo pc do hotel ) mas se fizeres now.longstring eu penso que é assim tu adquires a hora atual sendo mais fácil do que dares a imagem um nome predefinido ... assim sabes as horas e não vai haver conflito mais tarde ... Claro depois para a comparação das imagens terias que correr a pasta inteira se seguires com esta ideia pergunta que dou uma ajuda 😉 ... mas ainda bem que resolveste... quanto ao tópico , para facilitares a moderação e ao pessoal que quer ajudar em cima do titulo do tópico, quando tas a visualizar o tópico tens lá ferramentas do tópico se clicares vai haver uma opção para poder colocar como resolvido 😉 Assim é mais fácil de saber quais ou não os tópicos que estão resolvidos Edited July 15, 2012 at 11:24 AM by Lukas S. E o Impossível foi criado por pessoas fracas pra acabar com o sonho das pessoas fortes. Não deixes que acabem com o teu. Sonha , luta , ambiciona e realiza. Se amas , se gostas tu vais conseguir. Cala todas as pessoas que um dia duvidaram de ti e prova que foste mais forte de qualquer outro. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now