2016-03-19 127 views
1

私のC#プログラムでは、RotateTransformメソッドを使用して、描画したい画像を回転させます。 これはすでに動作していますが、画像の回転位置から中心点をどのように変更できるかはわかりません。 デフォルトでは、これは私のPictureboxの左下ですが、残念ながら(760,480)pxの別のポイントを中心に回転する必要があります。C#RotateTransform - 中心の変更に関する問題

私はすべての場所を検索し、このCenterXプロパティにのみアクセスしました。 CenterX msdn

とにかく、私はこのプロパティをVisual Studioで見つけられないようです。 だから私は間違っていると思います。

*e.Graphics.RotateTransform(angle); 
e.Graphics.DrawLine(Pens.Black, physicObj.lineStartingPoint, physicObj.lineEndingPoint); 
e.Graphics.FillEllipse(new SolidBrush(Color.Red), new Rectangle(physicObj.leftCornerCircle, physicObj.circleSize)); 
e.Graphics.FillRectangle(new SolidBrush(Color.Blue), new Rectangle(physicObj.leftCornerRectangle, physicObj.rectangleSize));* 

この部分は正常に動作しているが、周りに回転させるために間違った中心点を使用しています。

私の現在のコードは次のようになります。 私は

e.Graphics.RotateTransform.CenterX = ... ; 

を使用しようとしたが、e.Graphics.RotateTransform内でアクセスなしCenterXことがないように思われています。 Visual Studioでは、メソッドであることを示すRotateTransformの下に赤い線が表示されますが、これは指定されたコンテキストでは無効です。 私はこのプロパティを設定する方法を知らず、コーディング例も見つからず、Microsoftが提供する情報に基づいて、これを行う方法だと思っていました。

この中心点を変更するために私が何をする必要があることを誰かが説明できることを望みます。 ありがとうございました!

+1

[ビットマップ上の角度で回転ドローライン](http://stackoverflow.com/questions/36015098/draw-line-rotated-at-anの可能な重複を-angle-over-bitmap)もう一つの例[here](http://stackoverflow.com/questions/36035558/degree-rotation-on-triangle-without-changing-position-using-c-sharp-windows-appl/ 36039553#36039553) - ソートで使用するには、Graphics.TranslateTranform beoreを使用し、ローテーションの後に描画します。 - CenterXはMedia、つまりWPFからのものです。私はあなたがWInFormsをやっていると仮定します – TaW

+0

また、いくつかの言語の基礎を学ぶ必要があります。プロパティのようなメソッドを扱うのは意味がありません。 – usr

答えて

4

それは非常に簡単です:
1. 3つの行列を作成し、結果を達成するためにそれらを掛け、基本的に

float centerX = 760; 
float centerY = 480; 
e.Graphics.TranslateTransform(-centerX, -centerY); 
e.Graphics.RotateTransform(angle); 
e.Graphics.TranslateTransform(centerX, centerY); 

バック
を翻訳センターに
2回転
3を翻訳 - 2Dと3Dの変換の基礎である単一変換行列


P.S.あなたは便宜のために拡張メソッドを作成することができます。

public static class GraphicsExtensions 
{ 
    public static void TranslateTransform(this Graphics g, float x, float y, float angle) 
    { 
    g.TranslateTransform(-x, -y); 
    g.RotateTransform(angle); 
    g.TranslateTransform(x, y); 
    } 
} 
関連する問題