Leudassdf Posted July 9, 2012 at 08:54 AM Report Share #467998 Posted July 9, 2012 at 08:54 AM Boas pessoal. Eu tenho o seguinte codigo para fazer um printscreen a partir de uma localizaçao especifica: Dim Img As New Bitmap(5, 10) Dim g As Graphics = Graphics.FromImage(Img) g.CopyFromScreen(110, 50, 0, 0, Img.Size) PictureBox1.Image = Img g.Dispose() quando faço g.copyfromscreen tenho como paramentros a sourcex,sourcey,destinationx,destinationy,size) Ou seja no primeiro parametro devo colocar a posiçao incicial no eixo do x depois no eixo do y e depois o destino do x e do y certo? Ou seja se eu quise-se copiar da posiçao 110 até a 120 no eixo dos y, e da 50 á 60 no eixo dos x teria de ser assim: g.CopyFromScreen(50, 110, 60,120, Img.Size) correto? No entanto se o fizer assim nao me apresenta qualquer imagem no picturebox. para poder apresentar tenho que escolher o tamanho que quero quando declaro o img e colocar o destinationx e destinariony a zeros. Mas porque é que tem de ser assim? Cumprimentos Link to comment Share on other sites More sharing options...
ribeiro55 Posted July 9, 2012 at 09:13 AM Report Share #468003 Posted July 9, 2012 at 09:13 AM Não. Primeiro, repara que estás a declarar o teu bitmap com 5x10. Depois, os parametros são XY na origem, XY no destino e área, ou seja, para todos os casos típicos, o XY no destino será sempre 0,0. Os valores que colocares de XY no destino resultam num shift do XY da imagem no destino. Por exemplo, para capturar 150x50 do ecrã, a partir da posição 10x10 farias: Dim Img As New Bitmap(150, 50) Dim g As Graphics = Graphics.FromImage(Img) g.CopyFromScreen(10, 10, 0, 0, Img.Size) PictureBox1.Image = Img g.Dispose() O tamanho da captura é defenido por o blocksize, que neste caso é sempre o tamanho da imagem. Como queres transferir integralmente a captura para o bitmap, definimos o destino para 0,0. Para perceberes, experimenta trocar o destino para -75,-25 e vais reparar que a captura está completa até 150x50, mas só vai aparecer metade da captura na Picturebox, isto porque fizemos um shift para valores negativos, em metade de cada eixo. Pegando no teu exemplo, se quisesses copiar do 50 a 60 no X e 110 a 120 no Y, terias de fazer assim: Dim Img As New Bitmap(10, 10) Dim g As Graphics = Graphics.FromImage(Img) g.CopyFromScreen(50, 110, 0, 0, Img.Size) PictureBox1.Image = Img g.Dispose() Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips" Link to comment Share on other sites More sharing options...
Leudassdf Posted July 9, 2012 at 09:27 AM Author Report Share #468006 Posted July 9, 2012 at 09:27 AM Não. Primeiro, repara que estás a declarar o teu bitmap com 5x10. Depois, os parametros são XY na origem, XY no destino e área, ou seja, para todos os casos típicos, o XY no destino será sempre 0,0. Os valores que colocares de XY no destino resultam num shift do XY da imagem no destino. Por exemplo, para capturar 150x50 do ecrã, a partir da posição 10x10 farias: Dim Img As New Bitmap(150, 50) Dim g As Graphics = Graphics.FromImage(Img) g.CopyFromScreen(10, 10, 0, 0, Img.Size) PictureBox1.Image = Img g.Dispose() O tamanho da captura é defenido por o blocksize, que neste caso é sempre o tamanho da imagem. Como queres transferir integralmente a captura para o bitmap, definimos o destino para 0,0. Para perceberes, experimenta trocar o destino para -75,-25 e vais reparar que a captura está completa até 150x50, mas só vai aparecer metade da captura na Picturebox, isto porque fizemos um shift para valores negativos, em metade de cada eixo. Pegando no teu exemplo, se quisesses copiar do 50 a 60 no X e 110 a 120 no Y, terias de fazer assim: Dim Img As New Bitmap(10, 10) Dim g As Graphics = Graphics.FromImage(Img) g.CopyFromScreen(50, 110, 0, 0, Img.Size) PictureBox1.Image = Img g.Dispose() Obrigada ribeiro55. Realmente ja tinha percebido que teria que manter os zeros so nao sabia o porque. mas agora ja estou a perceber. Cumprimentos 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