Leudassdf Posted July 14, 2012 at 11:47 AM Report #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?
Lukas S. Posted July 14, 2012 at 01:21 PM Report #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.
Leudassdf Posted July 14, 2012 at 04:19 PM Author Report #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
Leudassdf Posted July 14, 2012 at 08:56 PM Author Report #468678 Posted July 14, 2012 at 08:56 PM problema resolvido. tive que fazer dispose as fotos e aos graphics
Lukas S. Posted July 15, 2012 at 11:16 AM Report #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.
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