2014-01-27 1 views
0

У меня есть программа, которая принимает снимок экрана в паскале:Паскаль C Перевод

uses Graphics, 
    LCLIntf, 
    LCLType; 

var 
    Screen: TBitmap; 
    ScreenDC: HDC; 
begin 
    Screen := TBitmap.Create; 
    ScreenDC := GetDC(0); 
    Screen.LoadFromDevice(ScreenDC); 
    ReleaseDC(0, ScreenDC); 
    Screen.SaveToFile("Screen.bmp"); 
end. 

Мой вопрос лежит на LoadFromDevice() и SaveToFile() функции. Какие функции (если они есть) могут быть использованы для их реализации на языке программирования C. Попытка держаться подальше от сторонних библиотек как можно ближе. (WinAPI)

+3

WinAPI ** есть ** библиотека третья сторона. В любом случае googling «winapi screenshot» должен дать вам много ссылок. И [первый] (http://wiki.freepascal.org/LCL_Internals) - из wiki-файла freepascal. –

+1

http://stackoverflow.com/questions/997175/how-can-i-take-a-screenshot-and-save-it-as-jpeg-on-windows –

+2

Ничего. В C. нет такой вещи, как «экран». Вам понадобятся некоторые функциональные возможности платформы. В вашем случае winapi звучит как хороший кандидат. –

ответ

1

Посмотрите на эту

HDC hDC = GetDC(g_hWnd); 
LPRECT rect = (LPRECT)malloc(sizeof(RECT)); 
GetWindowRect(g_hWnd,rect); 
int h = rect->right - rect->left; 
int w = rect->bottom - rect->top; 
LPRECT rect = (LPRECT)malloc(sizeof(RECT)); 

GetWindowRect(g_hWnd,rect); 
HBITMAP hBmp = CreateCompatibleBitmap(hDC,w,h); 
PBITMAPINFO pbmi; 
pbmi = CreateBitmapInfoStruct(g_hWnd,hBmp); 

CreateBMPFile(g_hWnd, TEXT("c:\\TEMPO\\TestG2.bmp"), pbmi, hBmp, hDC) ; 
ReleaseDC(g_hWnd,hDC); 
DeleteObject(hBmp); 
DeleteObject(pbmi); 

if (rect != nullptr) 
    free(rect); 
+4

Почему вы malloc'ing 'RECT'? Почему бы не использовать распределение стека? – Dirk