Jump to content
Sign in to follow this  
Leudassdf

Erro ao salvar imagem

Recommended Posts

Leudassdf

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?

Share this post


Link to post
Share on other sites
Lukas S.

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.

Share this post


Link to post
Share on other sites
Leudassdf

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

Share this post


Link to post
Share on other sites
Lukas S.

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 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.

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.