Witam.
Mam pewien problem, a mianowicie piszę fragment kodu odpowiedzialny za wykonywanie printscreen'a (przy pomocy winAPI) niestety nie wiem dlaczego po skompilowaniu kodu otrzymuję pasiasty biało-czarny obraz.
oto kod:
#include <vcl.h>
#include <windows.h>
#include <stdio.h>
#include <iostream.h>
#pragma hdrstop
//---------------------------------------------------------------------------
void zapisz(FILE ,int, int);
#pragma argsused
int main(int argc, char argv[])
{
FILE *plik;
plik = fopen("desktop.bmp", "w");
DWORD kolor;
RECT rozmiar_okna;
HWND desktop = GetDesktopWindow();
HDC desktopdc = GetDC(desktop);
//HBITMAP mapa = CreateCompatibleBitmap(desktopdc, rozmiar_okna.right, rozmiar_okna.bottom);
//informacje o rozmiarze wysokosci okna zawiera :right a o szerokosci :bottom
GetWindowRect(desktop, &rozmiar_okna);
//wynika z budowy pliku .bmp
zapisz(plik,19778,2);
zapisz(plik,rozmiar_okna.bottomrozmiar_okna.right4+55,4);
zapisz(plik,0,2);
zapisz(plik,0,2);
zapisz(plik,1078,4);
zapisz(plik,40,4);
zapisz(plik,rozmiar_okna.right,4);
zapisz(plik,rozmiar_okna.bottom,4);
zapisz(plik,0,2);
zapisz(plik,24,2);
zapisz(plik,0,4);
zapisz(plik,0,4);
zapisz(plik,0,4);
zapisz(plik,0,4);
zapisz(plik,0,4);
zapisz(plik,0,4);
zapisz(plik,17468,0);
//Zapisanie zrzutu ekranu do bitmapy
for (int x=0; x<rozmiar_okna.right; x++)
{
for(int y = 0; y<rozmiar_okna.bottom; y++)
{
kolor = GetPixel(&desktopdc, x, y);
//zapisanie wartosci koloru do pliku
zapisz(plik, kolor, 4);
}
}
fclose(plik);
system("PAUSE");
return 0;
}
//---------------------------------------------------------------------------
void zapisz(FILE * plik, int wartosc, int rozmiar)
{
int w = wartosc-1;
for(int a=0; a<rozmiar; a++)
{
int zwr= (wartosc<<((w-a)8))>>(w8); //poniewaz fputc zapisuje BYTE do pliku
fputc(zwr, plik);
}
}
Przypuszczam że kłopot tkwi w kontekscie urządzenia (ponoć z niekażdego można czytać piksele - ale w dokumentacji nie ma przeciwwskazać dla Desktop'u)
Z góry dzięki