Em primeiro lugar vamos
ver quais as classes que usaremos para isso:
O wxWidgets trabalha
com alguns tipos de DC ou Device Context, cada um deles é
responsável por selecionar um determinado objeto para que possamos
desenhar ou obter informações de imagem, um dos Dcs que já
expliquei por aqui foi o wxPaintDC, com ele, selecionamos um objeto
derivado de wxWindow e podemos desenhar nesse objeto, hoje vamos ver
outros dois Dcs, o wxScreenDC, que seleciona a tela do Desktop,
fazendo com que possamos convertê-la em imagem, depois usaremos o
wxMemoryDC que seleciona um wxBitmap e consegue desenhar no mesmo.
Vamos criar uma função
chamada GetScreenShot que vai nos retornar um wxBitmap:
wxBitmap GetScreenShot() { wxSize mSize = wxGetDisplaySize(); wxBitmap mBmp = wxBitmap(mSize.x, mSize.y); wxMemoryDC mDC(mBmp); wxScreenDC sDC; mDC.Blit(0, 0, mSize.x, mSize.y, &sDC, 0, 0); mDC.SelectObject(wxNullBitmap); return mBmp; }
Na linha 1 temos a
declaração da função.
Na linha 4 pegamos o
tamanho do nosso Desktop, incluindo a área do painel, usando a
função wxGetDisplaySize() que me retornará um wxSize.
Na linha 6 criamos um
wxBitmap com as dimensões da nossa Área de Trabalho.
ha 8 criamos o
wxMemoryDC passando como parâmetro o wxBitmap, ele será responsável
por plotar a imagem da Área de Trabalho em nosso bitmap.
Na linha 10 criamos o
wxScreenDC, ele será responsável por pegar a imagem da Área de
Trabalho, ele fará isso automaticamente.
Em 12 temos a parte
mais complicada da função, é quando plotamos a imagem da área de
trabalho no bitmap usando a função Blit.
Os parâmetros da
função Blit que usaremos aqui são:
O primeiro e o segundo
parâmetros são usados para passar a posição inicial do bitmap
onde queremos desenhar, aqui uso 0 e 0 pois quero que a Área de
Trabalho seja plotada iniciando nessas coordenadas.
O terceiro e quarto
parâmetros são a altura e largura que irei usar na plotagem, no
caso o tamanho total da área de trabalho.
O quinto parâmetro é
um ponteiro para o DC que quero “colar” na imagem, no caso o
wxScreenDC com a imagem da nossa Área de Trabalho.
O sexto e o sétimo
parâmetros definem a partir de qual ponto do DC que estamos plotando
será iniciado o processo, aqui eu usei 0 e 0 mais uma vez pois quero
a área total do mesmo.
Na linha 14 removo o
mBmp do controle do wxMemoryDC.
E em 16 finalizo
retornando o mBmp na função.
Vejam que com poucas
linhas conseguimos obter um ScreenShot da nossa área de trabalho.
Para testar a função:
class wxAppSS : public wxApp { public: virtual bool OnInit(void); }; bool wxAppSS::OnInit(void) { wxInitAllImageHandlers(); GetScreenShot().SaveFile(wxT("test.png"), wxBITMAP_TYPE_PNG); return false; } IMPLEMENT_APP(wxAppSS)
Resultado Final no Mint/Linux |
0 comentários:
Postar um comentário