Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::mem::zeroed;
- use winapi::shared::windef::HBITMAP;
- use winapi::shared::windef::HDC;
- use winapi::shared::windef::HGDIOBJ;
- use winapi::um::wingdi::BitBlt;
- use winapi::um::wingdi::CreateCompatibleBitmap;
- use winapi::um::wingdi::CreateCompatibleDC;
- use winapi::um::wingdi::DeleteDC;
- use winapi::um::wingdi::DeleteObject;
- use winapi::um::wingdi::GetDIBits;
- use winapi::um::wingdi::SelectObject;
- use winapi::um::wingdi::BITMAPINFO;
- use winapi::um::wingdi::DIB_RGB_COLORS;
- use winapi::um::wingdi::SRCCOPY;
- use winapi::um::winuser::GetDC;
- use winapi::um::winuser::GetDesktopWindow;
- fn main() {
- const width: i32 = 1000;
- const height: i32 = 500;
- unsafe {
- let desktopHandle = GetDesktopWindow();
- let mut windowDC = GetDC(desktopHandle);
- let outputBitmap = CreateCompatibleBitmap(windowDC, width, height);
- let blitDC = CreateCompatibleDC(windowDC);
- let oldBitmap = SelectObject(blitDC, outputBitmap as HGDIOBJ);
- BitBlt(blitDC, 0, 0, width, height, windowDC, 0, 0, SRCCOPY);
- SelectObject(blitDC, oldBitmap);
- let mut bi = zeroed::<BITMAPINFO>();
- bi.bmiHeader.biSize = 40;
- let ok = GetDIBits(
- blitDC,
- outputBitmap,
- 0,
- height as u32,
- std::ptr::null_mut(),
- &mut bi,
- DIB_RGB_COLORS,
- );
- if ok != 0 {
- let mut bih = bi.bmiHeader;
- bih.biHeight = -(bih.biHeight).abs();
- bi.bmiHeader.biCompression = 0;
- createImage(blitDC, outputBitmap, bi);
- // return image
- }
- DeleteObject(outputBitmap as HGDIOBJ);
- DeleteDC(blitDC);
- }
- }
- fn createImage(hdc: HDC, outputBitmap: HBITMAP, bi: BITMAPINFO) {
- let bih = bi.bmiHeader;
- let height = bih.biHeight.abs();
- let bitCount = bih.biBitCount as i32;
- let strideBits = bih.biWidth * bitCount;
- let strideBytesAligned = (((strideBits - 1) | 0x1F) + 1) >> 3;
- }
Advertisement
Add Comment
Please, Sign In to add comment