system
4. September 2007 um 08:21
1
Hi,
wie kann man mit C++ einen Screenshot erzeugen und den dann in einer Bitmap-Datei speichern???
Ich bin jetzt nur so weit gekommen, dass ich mir erst das Handle vom Desktop mit GetDC oder so was holen muss und dann noch was und das dann in eine Bitmap speichern.
mfg cryspy
w71
4. September 2007 um 09:20
2
[CODE]HDC HScreenDC = GetDC(0);
Image1->Picture->Bitmap->Handle = CreateCompatibleBitmap(HScreenDC,
Form1->Width,
Form1->Height);
[B]int[/B] result = GetDeviceCaps(HScreenDC, RASTERCAPS);
[B]if[/B] (result & RC_PALETTE)
{
[B]int[/B] palette_size = GetDeviceCaps(HScreenDC, SIZEPALETTE);
[B]if[/B] (palette_size == 256)
{
[B]const[/B] size_t size = [B]sizeof[/B](LOGPALETTE) + 255 * [B]sizeof[/B](PALETTEENTRY);
[B]unsigned char[/B]* pBuffer = [B]new unsigned char[/B][size];
LPLOGPALETTE lplogpal =
[B]reinterpret_cast[/B]<LPLOGPALETTE>(pBuffer);
lplogpal->palVersion = 0x300;
lplogpal->palNumEntries = 256;
GetSystemPaletteEntries(HScreenDC, 0, 256,
lplogpal->palPalEntry);
Image1->Picture->Bitmap->Palette = CreatePalette(lplogpal);
[B]delete[/B] [] pBuffer;
}
}
ReleaseDC(0, HScreenDC);
HDC HWindowDC = GetWindowDC(Form1->Handle);
BitBlt(Image1->Picture->Bitmap->Canvas->Handle, 0, 0,
Image1->Picture->Bitmap->Width, Image1->Picture->Bitmap->Height,
HWindowDC, 0, 0,
SRCCOPY);
ReleaseDC(Form1->Handle, HWindowDC);[/CODE]
Du musst aber noch eine Image-Componente erstellen.
system
4. September 2007 um 10:48
3
Danke für den Code, aber wie geht das mit der Image-Compononte (sorry falls ich mich ein bissl blöd anstell) `?
w71
4. September 2007 um 11:36
4
VC6 ziehst du einfach so ein Dingens auf dein Workspace. Wenn du hoverst steht da dann Image.