Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2007, 19:49   #1
delphi_coder
 
Регистрация: 15.09.2007
Сообщений: 4
По умолчанию GDI plus API

Есть код, который сохраняет скриншот экрана в файл, конвертируя в PNG средствами gdi.

Код:
procedure ScreenShot;
var
  token: dword;
  input: TGdiplusStartupInput;
  image: GPIMAGE;
  Clsid: TGUID;
  hBMP   : HBITMAP;
  oldObj : HGDIOBJ;
  DESCDC : HDC;
  memDC  : HDC;
  Screen_Width  : Integer;
  Screen_Height : Integer;
begin
  Screen_Height := GetSystemMetrics(SM_CYSCREEN);
  Screen_Width  := GetSystemMetrics(SM_CXSCREEN);
  DESCDC := GetDC(GetDesktopWindow());
  memDC  := CreateCompatibleDC(DESCDC);
  hBMP   := CreateCompatibleBitmap(DESCDC, Screen_Width, Screen_Height);
  oldObj := SelectObject(memDC, hBMP);
  BitBlt(memDC, 0, 0, Screen_Width, Screen_Height, DESCDC, 0, 0,   SRCCOPY);
  image := nil;
  FillChar(input, SizeOf(input), 0);
  input.GdiplusVersion := 1;
  GdiplusStartup(token, @input, nil);
  GdipCreateBitmapFromHBITMAP(hBMP, 0, image);
  GetEncoderClsid('image/png', Clsid);
  GdipSaveImageToFile(image, 'C:\screen.png', @ClsId, nil);
  GdipDisposeImage(image);
  GdiplusShutdown(token);
  SelectObject(memDC, oldObj);
  DeleteObject(memDC);
  DeleteObject(hBMP);
  ReleaseDC(GetDesktopWindow(), DESCDC);
end;
Как мне получить указатель на сконвертированный PNG файл в памяти?

Последний раз редактировалось rpy3uH; 28.09.2007 в 19:20.
delphi_coder вне форума Ответить с цитированием
Старый 28.09.2007, 12:41   #2
studenth
Форумчанин
 
Регистрация: 10.09.2007
Сообщений: 105
По умолчанию

Наверное как то так...
Gdiplus::BitmapData bitmapdata;
Эта структура будет хранить информацию об изображении

Gdiplus::Rect rect(0, 0, image.GetWidth(), image.GetHeight());

image.LockBits(&rect, Gdiplus::ImageLockModeRead, image.GetPixelFormat(), &bitmapdata);

а потом bitmapdata.Scan0 - вот тебе и указатель.

Ну естественно в твоем случае нужно сделать иначе....идти, наверное, нужно в эту сторону
Бог сделал людей разными, а генерал Кольт уравнял шансы
studenth вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск