Jump to content

Duvida no copyfromscreen


Leudassdf
 Share

Recommended Posts

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

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

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

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
 Share

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