zoukankan      html  css  js  c++  java
  • 位图绘制和截取指定区域的位图

    用BitBlt函数从内存中复制位图到窗口中,

    case WM_PAINT:  //在Paint消息中绘制位图
            {
                PAINTSTRUCT ps = { 0 };
                HDC hdc = ::BeginPaint(hWnd, &ps);
                //TODO:在下面添加画图代码
    
                DrawBmp(hdc);//绘制位图
    
                EndPaint(hWnd, &ps);
            }break;


    void
    DrawBmp(HDC hdc) { //加载位图 HBITMAP hBmp1 = LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_BITMAP1)); //创建内存DC HDC hMenmdc = CreateCompatibleDC(hdc); //在内存中加载位图,并保存原来的虚拟位图 HGDIOBJ nOldBmp = SelectObject(hMenmdc, hBmp1); //将内存中的位图复制到当前DC中 BitBlt(hdc, 100, 100, 285, 65, hMenmdc, 0, 0, SRCCOPY);  //原样绘制,位图大小为:285*65 /*BitBlt函数说明: WINGDIAPI BOOL WINAPI BitBlt( _In_ HDC hdc, //目标DC _In_ int x, //在目标DC绘图时起点X坐标 _In_ int y, //Y坐标 _In_ int cx, //绘图的宽度 _In_ int cy, //绘图的高度, _In_opt_ HDC hdcSrc,//源DC _In_ int x1, //在源DC中要复制的位图起点X坐标 _In_ int y1, //Y坐标 _In_ DWORD rop //复制方式(SRCCOPY) ); 在目标DC上控制位图的宽和高,在源DC中控制位图的起点坐标,就能从位图中截取指定位置的图片了 */ //绘制源DC位图75,15,的位置,宽度100,高度30的位图到目标DC中 BitBlt(hdc, 100, 200, 100, 30, hMenmdc, 75, 15, SRCCOPY);  //截取指定区域的位图 //将保存的原来的虚拟位图还给内存DC SelectObject(hMenmdc, nOldBmp); //删除位图句柄 DeleteObject(hBmp1); //删除内存DC DeleteDC(hMenmdc); }

    其效果如下:

    屏幕也截取出来了,但是如何比较两个位图相同呢?还在查询与学习中,

    签名:GreenLeaf1976
  • 相关阅读:
    nc多校2021-9E.Eyjafjalla
    AcWing第一场周赛题解
    关于Windows和Linux下的对拍
    牛客小白月赛29全题解
    牛客小白月赛32全题解
    牛客小白月赛33全题解
    AC自动机
    Trie树
    KMP
    celery序列化问题
  • 原文地址:https://www.cnblogs.com/greenleaf1976/p/14643702.html
Copyright © 2011-2022 走看看