24小时热门版块排行榜    

CyRhmU.jpeg
查看: 165  |  回复: 2
当前主题已经存档。
【有奖交流】积极回复本帖子,参与交流,就有机会分得作者 tc1788 的 1 个金币
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

tc1788

铁虫 (小有名气)

[交流] 【求助】改变坐标原点的小程序 这么写对吗

最后一个函数 注释的是源程序 注释下面的语句是我自己改的
坐标原点变了 DRAWBMP语句是这么改吗 我改完怎么没有图了啊 帮帮我吧
还用改别的吗
void CSolidSim:rawSolidRound(CDC *pDC, int startx, int starty)
{
       
    CBrush brush;
        brush.CreateSolidBrush(RGB(255,0,0));

        CBrush * oldBrush = pDC->SelectObject(&brush);
       
        //减去 0.5 是为了画出来的图美观,可以去掉。 下面画空心的部分同这个
        pDC->Ellipse(startx, starty, startx + DIAMETER-0.5, starty + DIAMETER-0.5);

        pDC->SelectObject(oldBrush);

        brush.DeleteObject();








void CSolidSim::SaveAsBmp(CString in_name, CString filename)
{
//定义图形大小
        int iWidth = 1000;
        int iHeight = 1000;
    int iPixel  = 16;
        //图形格式参数
    LPBITMAPINFO lpbmih = new BITMAPINFO;
    lpbmih->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    lpbmih->bmiHeader.biWidth = iWidth;
    lpbmih->bmiHeader.biHeight = iHeight;
    lpbmih->bmiHeader.biPlanes = 1;
    lpbmih->bmiHeader.biBitCount = iPixel;
    lpbmih->bmiHeader.biCompression = BI_RGB;
    lpbmih->bmiHeader.biSizeImage = 0;
    lpbmih->bmiHeader.biXPelsPerMeter = 0;
    lpbmih->bmiHeader.biYPelsPerMeter = 0;
    lpbmih->bmiHeader.biClrUsed = 0;
    lpbmih->bmiHeader.biClrImportant = 0;

    //创建位图数据
    HDC hdc,hdcMem;
    HBITMAP hBitMap = NULL;
    CBitmap *pBitMap = NULL;
    CDC *pMemDC = NULL;
    BYTE *pBits;

    hdc = CreateIC(TEXT("DISPLAY",NULL,NULL,NULL);
    hdcMem = CreateCompatibleDC(hdc);
    hBitMap = CreateDIBSection(hdcMem,lpbmih,DIB_PAL_COLORS,(void **)&pBits,NULL,0);
    pBitMap = new CBitmap;
    pBitMap->Attach(hBitMap);
    pMemDC = new CDC;
    pMemDC->Attach(hdcMem);
    pMemDC->SelectObject(pBitMap);
     //
        CRect rc(0,0,iWidth,iHeight);
        pMemDC->SetBkMode(TRANSPARENT);
        DrawBmp(pMemDC,rc,in_name);


    //保存到文件并创建位图结构
    BITMAPFILEHEADER bmfh;
    ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER));
    *((char *)&bmfh.bfType) = 'B';
    *(((char *)&bmfh.bfType) + 1) = 'M';
    bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
    bmfh.bfSize = bmfh.bfOffBits + (iWidth * iHeight) * iPixel / 8;

    TCHAR szBMPFileName[128];
    int iBMPBytes = iWidth * iHeight * iPixel / 8;
    strcpy(szBMPFileName,filename);
    CFile file;
    if(file.Open(szBMPFileName,CFile::modeWrite | CFile::modeCreate))
    {
        file.Write(&bmfh,sizeof(BITMAPFILEHEADER));
        file.Write(&(lpbmih->bmiHeader),sizeof(BITMAPINFOHEADER));
        file.Write(pBits,iBMPBytes);
        file.Close();
    }

    pMemDC->DeleteDC();
    delete pMemDC;        pMemDC  = NULL;
    delete pBitMap; pBitMap = NULL;
    delete lpbmih;  lpbmih  = NULL;
}









void CSolidSim:rawBmp(CDC *pDC, CRect rcClient, CString in_name)
{
CBrush brushCtl;
        brushCtl.CreateSolidBrush(RGB(255,255,255));         
        pDC->SelectObject(&brushCtl);
          pDC->Rectangle(rcClient);
        pDC->FillRect(rcClient,&brushCtl) ;       
        brushCtl.DeleteObject();

        int left = rcClient.left;
        //int top  = rcClient.top;
int bottom  = rcClient.bottom;
         
pDC->MoveTo(left, bottom);
                               
        /*for(int x = 0; x<100 ; x++)
        {
                for(int y = 0; y<0 ; y++ )
                {
                       
                        switch(a[x+y*100])
                        {
                        case 2:
                                DrawBlackRound(pDC, left +y * DIAMETER, top + x * DIAMETER);      
                                break;
                        case 1:
                                DrawSolidRound(pDC, left + y * DIAMETER, top + x * DIAMETER);      
                                break;
         
                        case 0:
                                //nothing to do
                                break;
                        }
                }
        }       

}*/
改为
for(int y = 0; y<100 ; y++)
        {
                for(int x = 0; x<0 ; x++ )
                {
                       
                        switch(a[x+y*100])
                        {
                        case 2:
                                DrawBlackRound(pDC, left +x * DIAMETER, bottom - y * DIAMETER);      
                                break;
                        case 1:
                                DrawSolidRound(pDC, left + x * DIAMETER, bottom - y * DIAMETER);      
                                break;
           
                        case 0:
                                //nothing to do
                                break;
                        }
                }
        }       

}


蓝色为源程序 粉色的我自己改的
坐标原点变了 DRAWBMP语句是这么改吗 我改完怎么没有图了啊 帮帮我吧

[ Last edited by tc1788 on 2009-6-12 at 09:46 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangen994

荣誉版主 (著名写手)

将军

3楼2009-06-12 12:23:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 3 个回答

woshilsh

荣誉版主 (职业作家)

优秀版主

是不是刷新的图出了边界?

你检查下!
[center][url=http://www.91cool.net/][img]http://id.91cool.net/sign/?name=小木虫印&amp;amp;amp;say=各位版主辛苦了![/img][/url][/center]
2楼2009-06-12 11:09:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复(可上传附件)
信息提示
请填处理意见