我画的圆,总感觉不圆,有锯齿
有什么好办法解决吗?

解决方案 »

  1.   

    用GDI+,给Graphics设置Smoothing。然后再画
      

  2.   

    void CVcTestDlg::OnPaint()
    {
    CPaintDC dc(this); 
    Graphics gdi(dc.m_hDC);
    gdi.SetSmoothingMode(SmoothingModeHighSpeed);
    gdi.FillEllipse(&SolidBrush(Color(255, 0, 0, 0)), 0, 0, 200, 100);
    }
    可界面为什么没有东西呢?
      

  3.   

    gdi+库初始化了吗?
    这样只是填充一块区域,而不是画个轮廓。
      

  4.   

    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
      

  5.   

    #define UNICODE
    #include <windows.h>
    #include <gdiplus.h>
    using namespace Gdiplus;VOID OnPaint(HDC hdc)
    {
       Graphics graphics(hdc);
       Pen      pen(Color(255, 0, 0, 255));
       graphics.DrawLine(&pen, 0, 0, 200, 100);
    }LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, INT iCmdShow)
    {
       HWND                hWnd;
       MSG                 msg;
       WNDCLASS            wndClass;
       GdiplusStartupInput gdiplusStartupInput;
       ULONG_PTR           gdiplusToken;
       
       // Initialize GDI+.
       GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
       
       wndClass.style          = CS_HREDRAW | CS_VREDRAW;
       wndClass.lpfnWndProc    = WndProc;
       wndClass.cbClsExtra     = 0;
       wndClass.cbWndExtra     = 0;
       wndClass.hInstance      = hInstance;
       wndClass.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
       wndClass.hCursor        = LoadCursor(NULL, IDC_ARROW);
       wndClass.hbrBackground  = (HBRUSH)GetStockObject(WHITE_BRUSH);
       wndClass.lpszMenuName   = NULL;
       wndClass.lpszClassName  = TEXT("GettingStarted");
       
       RegisterClass(&wndClass);
       
       hWnd = CreateWindow(
          TEXT("GettingStarted"),   // window class name
          TEXT("Getting Started"),  // window caption
          WS_OVERLAPPEDWINDOW,      // window style
          CW_USEDEFAULT,            // initial x position
          CW_USEDEFAULT,            // initial y position
          CW_USEDEFAULT,            // initial x size
          CW_USEDEFAULT,            // initial y size
          NULL,                     // parent window handle
          NULL,                     // window menu handle
          hInstance,                // program instance handle
          NULL);                    // creation parameters
      
       ShowWindow(hWnd, iCmdShow);
       UpdateWindow(hWnd);
       
       while(GetMessage(&msg, NULL, 0, 0))
       {
          TranslateMessage(&msg);
          DispatchMessage(&msg);
       }
       
       GdiplusShutdown(gdiplusToken);
       return msg.wParam;
    }  // WinMainLRESULT CALLBACK WndProc(HWND hWnd, UINT message, 
       WPARAM wParam, LPARAM lParam)
    {
       HDC          hdc;
       PAINTSTRUCT  ps;
       
       switch(message)
       {
       case WM_PAINT:
          hdc = BeginPaint(hWnd, &ps);
          OnPaint(hdc);
          EndPaint(hWnd, &ps);
          return 0;
       case WM_DESTROY:
          PostQuitMessage(0);
          return 0;
       default:
          return DefWindowProc(hWnd, message, wParam, lParam);
       }
    } // WndProc
      

  6.   

    理论上说,在光栅显示器上是没法画出“光滑的圆”的。不过你可以用DDA+平滑算法画出一个看起来比较光滑的圆。如果你比较懒,用GDI+就是了,否则就去看图形学的书,超过50页厚的应该都有讲到。