zoukankan      html  css  js  c++  java
  • VC6.0图形处理10腐蚀膨胀

    void CBMPViewerDoc::OnMenuitem32799() //图像的腐蚀
    {


    //自定义3*3的矩阵作为检验的结构
    // TODO: Add your command handler code here


    int linewidth;
    linewidth=(pbi->bmiHeader.biWidth*pbi->bmiHeader.biBitCount+31)/32*4;


    unsigned char *lpDest;
    unsigned char *lpScr;



    HLOCAL hTemp;
    hTemp = LocalAlloc(LHND ,linewidth * bi.biHeight );

    LPSTR lpTemp;
    lpTemp = (char*)LocalLock(hTemp);//以上四句分配一块与源图像数据大小一致的内存块,并返回指针lpTemp
    //暂时存储新建的图片数据,完成后,将数据copy给原数据区

    int pixel;
    // TODO: Add your command handler code here
    for(int i = 0 ; i< bi.biHeight ; i++)
    {
    for(int j = 0 ; j< bi.biWidth ; j++)
    {
        lpDest = (unsigned  char *)lpTemp+linewidth*(bi.biHeight - i -1 ) + j ;
    if((i == 0 ) || (j ==0) || (i == bi.biHeight) || (j == bi.biWidth) ){
    lpScr = (unsigned char*)lpBuf + linewidth*(bi.biHeight - i -1) + j;
    *lpDest = *lpScr;




    else
    {

    //lpDest = (unsigned  char *)lpTemp+linewidth*(bi.biHeight - i -1 ) + j ;
    *lpDest = 0;

    for(int s = -1 ; s<=1; s++)
    {
    for(int t = -1; t <= 1;t++)
    {
    lpScr = (unsigned char *)lpBuf + linewidth*(bi.biHeight - i-1 + s) + j + t;
                  
    pixel = *lpScr;
    if(pixel == 255)
    {


    *lpDest = 255;
    }


    }


    }
       

    }

    }

    }

    memcpy(lpBuf , lpTemp, linewidth*bi.biHeight);//新图像数据copy给源数据
    // Invalidata(TRUE);
    UpdateAllViews(NULL,0,NULL);

    }


    void CBMPViewerDoc::OnMenuitem32800() //图像的膨胀
    {

    //自定义结构
    // TODO: Add your command handler code here

    int linewidth;
    linewidth=(pbi->bmiHeader.biWidth*pbi->bmiHeader.biBitCount+31)/32*4;

    unsigned char *lpDest;
    unsigned char *lpScr;


    HLOCAL hTemp;
    hTemp = LocalAlloc(LHND ,linewidth * bi.biHeight );

    LPSTR lpTemp;
    lpTemp = (char*)LocalLock(hTemp);//以上四句分配一块与源图像数据大小一致的内存块,并返回指针lpTemp
    //暂时存储新建的图片数据,完成后,将数据copy给原数据区

    int pixel;
    // TODO: Add your command handler code here
    for(int i = 0 ; i< bi.biHeight ; i++)
    {
    for(int j = 0 ; j< bi.biWidth ; j++)
    {
    lpDest = (unsigned  char *)lpTemp+linewidth*(bi.biHeight - i -1 ) + j ;
    if((i == 0 ) || (j ==0) || (i == bi.biHeight) || (j == bi.biWidth) ){
    lpScr = (unsigned char*)lpBuf + linewidth*(bi.biHeight - i -1) + j;
    *lpDest = *lpScr;



    else
    {

    //lpDest = (unsigned  char *)lpTemp+linewidth*(bi.biHeight - i -1 ) + j ;
    *lpDest = 255;




    for(int s = 0 ; s<=1; s++)
    {
    for(int t = 0; t <= 1;t++)
    {
    lpScr = (unsigned char *)lpBuf + linewidth*(bi.biHeight - i-1 + s) + j + t;

    pixel = *lpScr;
    if(pixel == 0)
    {
    *lpDest = 0;
    }

    }

    }


    }

    }

    }

    memcpy(lpBuf , lpTemp, linewidth*bi.biHeight);//新图像数据copy给源数据
    // Invalidata(TRUE);
    UpdateAllViews(NULL,0,NULL);

    }
  • 相关阅读:
    w3wp.exe占用CPU100%的解决办法
    Visual Studio 2005 查找和替换窗口 显示不了
    IIS:w3wp.exe进程占用cpu和内存过多的处理办法
    C# form ComboBox
    从尾到头打印链表,不允许逆置原链表
    [置顶] ATL窗口thunk机制的剖析与实现
    flex自定义用ArrayCollection做数据源的带checkbox的tree(功能强大的完美版^_^)
    oracle的PremaredStatement.executeBatch为什么返回2
    窗体Controls的OfType<>方法的使用
    HDU 1421 动态规划(DP) 搬寝室
  • 原文地址:https://www.cnblogs.com/libing64/p/2878766.html
Copyright © 2011-2022 走看看