zoukankan      html  css  js  c++  java
  • mfc 灰度图像显示及放大缩小功能的实现

    template <class T1, class T2>
    void CchinaDiankeSarDisPlayImagDlg::DisplayGrayImag(T1* pgrayData, int srcWidth, int srcHeight, int extractNum, float coefficient, int dstWidth, int dstHeight)
    {
    try
    {
    //ModifyPictureCtrlSize();

    COLORREF *data;
    CBitmap bm;
    CDC *MemDC = new CDC;

    int width = dstWidth, height = dstHeight;

    CDC* pDC = GetDlgItem(IDC_STATIC)->GetDC();// 获取 HDC(设备句柄) 来进行绘图操作
    pDC->SetBkMode(TRANSPARENT); //设置背景颜色为透明
    data = new COLORREF[width * height];//为data数据分配空间,大小为灰度图像的大小

    //为data赋值
    int itmp = 0;
    T2 val;
    for (int i = 0; i < height; i++)
    {
    for (int j = 0; j < width; j++)
    {
    val = pgrayData[(j*extractNum)*srcWidth + (i*extractNum)];
    data[i*width + j] = RGB(val*coefficient, val*coefficient, val*coefficient);
    //data[i*width + j] = RGB(val/256, val/ 256, val / 256);
    }
    }

    //create bitmap
    bm.CreateBitmap(width, height, 1, 32, data);

    //实现双缓冲,避免闪烁
    MemDC->CreateCompatibleDC(pDC);
    MemDC->SelectObject(&bm);

    CRect rect;
    GetDlgItem(IDC_STATIC)->GetWindowRect(&rect);
    ScreenToClient(&rect);
    pDC->SetStretchBltMode(COLORONCOLOR);//COLORONCOLOR

    //rect.Width(), rect.Height() 此宽度与高度为实际显示的尺寸 既放大缩小的尺寸
    pDC->StretchBlt(0, 0, rect.Width(), rect.Height(), MemDC, 0, 0, width, height, SRCCOPY);

    ////删除已经分配的内存空间
    ReleaseDC(MemDC);
    delete MemDC;

    bm.DeleteObject();
    delete[] data;

    ReleaseDC(pDC);
    }
    catch(...)
    { }

    }

  • 相关阅读:
    Linux安装步骤
    Python邮件发送
    拉链表
    Hive
    Shell笔记
    Hadoop入门
    Thinkphp手把手练习
    Shell学习日记
    Linux安装mysql数据库
    Oracle集合操作
  • 原文地址:https://www.cnblogs.com/yuyuanbaobei521/p/13820436.html
Copyright © 2011-2022 走看看