none
請問有關scaletransform的問題 RRS feed

  • 問題

  • 請問各位前輩
    我用C++ 畫一個X,Y軸在form的正中間,
    X,Y軸值非常小(可能是0.0001),而且X,Y軸上有我畫上去的座標點,
    假如我今天用DrawLine畫直線方法去畫,我把X,Y軸的(0,0)畫在form的(500.500)上,
    那我怎麼使用scaletransform的方法把我畫好的圖放大呢?
    我去查過了,要用CenterX跟CenterY取得或設定這個scaletransform之中心點的 X 座標跟Y座標。
    http://msdn.microsoft.com/zh-tw/library/system.windows.media.scaletransform.aspx
    然後再用ScaleX跟ScaleY去縮放,但正確方我我還是不太知道怎麼使用。
    我有使用G.ScaleTransform(50,50)這樣去把它直接放大,是可以放大。
    但有關CenterX跟CenterY取得或設定這個scaletransform之中心點的 X 座標跟Y座標,這方法我不太會使用。

    可以不可以請各位前輩指導我一下。
    感謝

    2009年12月17日 上午 03:54

解答


  • Graphics.TranslateTransform 方法 (Single, Single)

    透過將指定的轉譯放置在此 Graphics 的變換矩陣之前,變更座標系統的原點。

     

    舉例來說   你畫一條線   (0,0) 到 (500.500)

    你可以使佣    Graphics.TranslateTransform  移動原點中心到   (250,250)

    然後在 使佣 scaletransform  縮放


    上面  這是屬於  全域的 轉換

     

    另外 也可也使佣  物件本身的轉換  

    EX:

     

    // Transform the path.
    Matrix myPathMatrix;
    myPathMatrix.Scale(2, 1);
    myPathMatrix.Rotate(30, MatrixOrderAppend);
    myGraphicsPath.Transform(&myPathMatrix);
    
    // Fill the transformed path on the new coordinate system.
    myGraphics.FillPath(&mySolidBrush2, &myGraphicsPath);

     

     

     

     

     

     

     

     

     

     

     




    Cmf.Net (C) 2009
    • 已標示為解答 Lolota Lee 2009年12月24日 上午 05:29
    2009年12月23日 上午 01:16

所有回覆

  • HI,

    您是要用WPF技術做ScaleTranform? 還是要用GDI+技術做ScaleTranform?, 如果是GDI+, 可以參考:
    Graphics::ScaleTransform Method (http://msdn.microsoft.com/en-us/library/zhc2xxtx.aspx)
    2009年12月17日 上午 06:25
  • 這本書裡面有詳細說明及範例,有中譯本:

    Petzold 大師的聖經級著作:
    Programming Microsoft Windows with C# http://www.charlespetzold.com/pwcs/index.html

    同樣範圍另外還有 API / VBNET / WPF 三種版本。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2009年12月17日 上午 09:34
  • 忘了說,我記得這個座標轉換會影響到字串輸出,字串也會跟著翻轉與變形,所以我都自己建個類別算座標。

    如果你不想一直自己縮放,你可以一開始就畫成 EMF ,然後指給 PictureBox.Image ,PictureBox 那邊把屬性調成 Zoom 即可。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2009年12月17日 上午 09:37
  • 忘了說,我記得這個座標轉換會影響到字串輸出,字串也會跟著翻轉與變形,所以我都自己建個類別算座標。

    如果你不想一直自己縮放,你可以一開始就畫成 EMF ,然後指給 PictureBox.Image ,PictureBox 那邊把屬性調成 Zoom 即可。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    各位前輩
    有關CenterX跟CenterY取得或設定這個scaletransform之中心點的 X 座標跟Y座標,這方法我不太會使用。
    有沒有哪個網站有比較簡單的教法呢?
    謝謝
    2009年12月18日 上午 07:32

  • Graphics.TranslateTransform 方法 (Single, Single)

    透過將指定的轉譯放置在此 Graphics 的變換矩陣之前,變更座標系統的原點。

     

    舉例來說   你畫一條線   (0,0) 到 (500.500)

    你可以使佣    Graphics.TranslateTransform  移動原點中心到   (250,250)

    然後在 使佣 scaletransform  縮放


    上面  這是屬於  全域的 轉換

     

    另外 也可也使佣  物件本身的轉換  

    EX:

     

    // Transform the path.
    Matrix myPathMatrix;
    myPathMatrix.Scale(2, 1);
    myPathMatrix.Rotate(30, MatrixOrderAppend);
    myGraphicsPath.Transform(&myPathMatrix);
    
    // Fill the transformed path on the new coordinate system.
    myGraphics.FillPath(&mySolidBrush2, &myGraphicsPath);

     

     

     

     

     

     

     

     

     

     

     




    Cmf.Net (C) 2009
    • 已標示為解答 Lolota Lee 2009年12月24日 上午 05:29
    2009年12月23日 上午 01:16
  • http://support.microsoft.com/kb/168743/zh-tw //使用延伸與 COLORADJUSTMENT HALFTONE


    CDC pDestDC ;
     pDestDC.CreateCompatibleDC(NULL);
      CBitmap pDestBitmap;
      pDestBitmap.CreateCompatibleBitmap(&pScrDC,desWidth,desHeight);//預定載入dc ,設定所需的高跟寬
       pDestDC.SelectObject(&pDestBitmap);
       pDestDC.SetStretchBltMode(HALFTONE);// 設定 HALFTONE
      pDestDC.StretchBlt(0,0,desWidth, desHeight,&pScrDC,0,0,this->m_PageSize.cx,this->m_PageSize.cy,SRCCOPY);// 縮放
      DeleteObject(pDestBitmap.m_hObject);
    2009年12月23日 上午 03:18