Нужно сделать 8 битовую копию экрана в формате PNG без использования модуля Graphics. Следующий код делает 24 битную картинку. Как перевести 24 бита в 8? Пытался пользоваться GetDIBits/SetDiBits - ничего не получилось. Подскажите, пожалуйста, в какую сторону копать?
Код | uses Windows, pngimage;
var png1 : TPNGObject; R: TRect; DC, memDC: HDC; bm, oldBM: HBITMAP; begin try windows.GetWindowRect(GetDesktopWindow, r); DC := GetDC(0); memDC := CreateCompatibleDC(DC); bm := CreateCompatibleBitmap(DC, R.Right, R.Bottom); oldBM := SelectObject(memDC, bm); BitBlt(memDC, 0,0, R.Right, R.Bottom, DC, 0,0, SRCCOPY); SelectObject(memDC, oldBM); DeleteDC(memDC); DeleteObject(oldBM); ReleaseDC(0, DC); png1 := TPNGObject.Create; png1.AssignHandle(bm, false, 0); DeleteObject(bm); png1.CompressionLevel := 9; png1.SaveToFile('screen.png'); finally png1.Free; end end.
|
|