Всем привет!
Нашел в MSDN пример - ну прямо то,что нужно!
Начал набирать и проверять! Все вроде правильно!
Осталось всего несколько строк до конца И ВДРУГ ОДНА ИЗ СТРОК НЕ РАБОТАЕТ!!!
Работаю в Visual Studio 2013 (C++).
Пишется функция:
......
static HPALETTE Scene_Palette;
static System::Drawing::Image ^ CaptureScene(HDC hdcSrc, int iwidth, int iheight)
{ // hdcSrc - Хендел сцены, iwidth - ширина сцены, iheigh - высота сцены
HDC hdcDest = CreateCompatibleDC(hdcSrc);
// Create compatible memory device context(DC)
HBITMAP hBitmap = CreateCompatibleBitmap(hdcSrc, iwidth,iheight);
// Create compatible bitmap
HGDIOBJ hOld = SelectObject(hdcDest, hBitmap);
// Selects an object into the specified device context (DC)
// New object replaces the previous and has the same type
BitBlt(hdcDest, 0, 0, iwidth, iheight, hdcSrc, 0, 0, SRCCOPY);
// Copy from Scene into Compatible Bitmap
SelectObject(hdcDest, hOld);
// Restore Selection
DeleteDC(hdcDest);
// Clear compatible memory device context(DC)
CreateLogicalPalette(hdcSrc);
System::Drawing::Image ^ SceneImage = Image.FromHbitmap(hBitmap,Scene_Palette);
// Create .NET Image Object
DeleteObject(hBitmap);
// Free up the Compatible Bitmap object
return SceneImage;
// Return Image
}
static void CreateLogicalPalette(HDC hdc)
{
if (GetDeviceCaps(hdc, RASTERCAPS) & RC_PALETTE)
{
UINT nSize = sizeof(LOGPALETTE)+(sizeof(PALETTEENTRY)* 256);
LOGPALETTE *pLP = (LOGPALETTE *) new BYTE[nSize];
pLP->palVersion = 0x300;
pLP->palNumEntries =
GetSystemPaletteEntries(hdc, 0, 255, pLP->palPalEntry);
Scene_Palette = CreatePalette(pLP); // Create Logical Palette
delete[] pLP;
}
}
Функцию Image.FromHbitmap пробовал писать в разных вариантах, c одним и двумя аргументами - ничего не помогает!
Ответы всегда похожие:
Error C2275: 'System::Drawing::Image' : illegal use of this type as an expression
Error C2228: left of '.FromHbitmap' must have class/struct/union
Помогите найти истину!
Regards,
Onic777