zoukankan      html  css  js  c++  java
  • MFC中图像的显示:SetPixel和StretchDIBits

    当用SetPixel函数时,

     for(int j=0;j<nHeight;j++)

      {

        for(int i=0;i<nWidth;k++)

        {

          int b=imgBits[j*nWidth+i];

          int g=b;

          int r=b;

         pDc->SetPixel(i,j,RGB(r,g,b));

        }

      }

    当使用StretchDIBits时要注意显示位图时经典的4字节对齐问题,要求显示每行数据的字节数是4的倍数。

    当每行的字节数不是4的倍数时,需要对其进行如下处理:

    有nHeight行,(nWidth+3)/4*4列,然后把imgBits中的像素值,正确的赋值给一个缓冲区imgBufferTemp,最后按imgBufferTemp显示就OK了。

    BYTE *imgBufferTemp;

    int nWidthTemp=(nWidth+3)/4*4;

    imgBufferTemp=new BYTE[nWidthTemp*nHeight];

    for(int i=0;i<nHeight;i++)

    {

     memcpy(imgBufferTemp+i*nWidthTemp,imgBitsi*nWidth,nWidth);

    }

    这样就完成了像素的正规化处理,接下来就可以用StretchDIBits直接显示,不会出现图象倾斜的问题了。

    整理于网路。

  • 相关阅读:
    树世界
    清空 NumericUpDown
    没有评论的日子
    GetData.cs

    Hashtable 在程序中控制重复项
    Convert.ToInt32() VS System.Int32.Parse()
    饮食九要素
    添加 or 修改 的一个处理方式
    一个关于 电话号码 的正则表达式
  • 原文地址:https://www.cnblogs.com/lyjclsd/p/3601775.html
Copyright © 2011-2022 走看看