git-svn-id: svn://ultimatepp.org/upp/trunk@2442 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2010-05-30 17:21:58 +00:00
parent abd142db0f
commit d13f3daaa2
4 changed files with 143 additions and 41 deletions

View file

@ -38,4 +38,3 @@ GUI_APP_MAIN
{
Fonts().Run();
}

View file

@ -0,0 +1,12 @@
uses
CtrlLib,
plugin\jpg,
plugin\gif,
plugin\tif;
file
main.cpp;
mainconfig
"" = "GUI DLL";

View file

@ -0,0 +1,8 @@
#ifndef _ScreenShotter_icpp_init_stub
#define _ScreenShotter_icpp_init_stub
#include "CtrlLib/init"
#include "plugin\jpg/init"
#include "plugin\gif/init"
#include "plugin\tif/init"
#include "plugin\pcx/init"
#endif

View file

@ -0,0 +1,83 @@
#include <CtrlLib/CtrlLib.h>
#include <plugin/bmp/bmp.h>
#include <plugin/jpg/jpg.h>
#include <plugin/gif/gif.h>
#include <plugin/tif/tif.h>
using namespace Upp;
Image ScreenShot(int x, int y, int cx, int cy)
{
HDC dcScreen = CreateDC("DISPLAY", NULL, NULL, NULL);
RGBA *pixels;
Buffer<byte> data;
data.Alloc(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256);
BITMAPINFOHEADER *hi = (BITMAPINFOHEADER *) ~data;;
memset(hi, 0, sizeof(BITMAPINFOHEADER));
hi->biSize = sizeof(BITMAPINFOHEADER);
hi->biPlanes = 1;
hi->biBitCount = 32;
hi->biCompression = BI_RGB;
hi->biSizeImage = 0;
hi->biClrUsed = 0;
hi->biClrImportant = 0;
hi->biWidth = cx;
hi->biHeight = -cy;
HBITMAP hbmp = CreateDIBSection(dcScreen, (BITMAPINFO *)hi, DIB_RGB_COLORS, (void **)&pixels, NULL, 0);
HDC dcMem = ::CreateCompatibleDC(dcScreen);
HBITMAP hbmpOld = (HBITMAP) ::SelectObject(dcMem, hbmp);
HDC hdcCompatible = CreateCompatibleDC(dcScreen);
::BitBlt(dcMem, 0, 0, cx, cy, dcScreen, x, y, SRCCOPY);
ImageBuffer ib(cx, cy);
memcpy(~ib, pixels, cx * cy * sizeof(RGBA));
::DeleteObject(::SelectObject(dcMem, hbmpOld));
::DeleteDC(dcMem);
::DeleteDC(dcScreen);
return ib;
};
extern "C" __declspec(dllexport) int capture_screen(int x, int y, int cx, int cy, char *filename) {
Image m = ScreenShot(x, y, cx, cy);
String ext = ToLower(GetFileExt(filename));
if(ext == ".png")
PNGEncoder().SaveFile(filename, m);
if(ext == ".bmp")
BMPEncoder().Bpp(32).SaveFile(filename, m);
if(ext == ".jpg")
JPGEncoder().SaveFile(filename, m);
if(ext == ".gif")
GIFEncoder().SaveFile(filename, m);
if(ext == ".tif" || ext == ".tiff")
TIFEncoder().SaveFile(filename, m);
return 0;
}
#define DLL_APP_MAIN \
void _DllMainAppInit(); \
\
BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpReserved) \
{ \
if(fdwReason == DLL_PROCESS_ATTACH) { \
Ctrl::InitWin32(AppGetHandle()); \
AppInitEnvironment__(); \
_DllMainAppInit(); \
} \
else \
if(fdwReason == DLL_PROCESS_DETACH) { \
Ctrl::ExitWin32(); \
} \
return true; \
} \
\
void _DllMainAppInit()
DLL_APP_MAIN {
}