Genel ve Yerel Dönüştürmeler
Genel dönüşüm, belirli Graphics bir nesne tarafından çizilen her öğeye uygulanan bir dönüştürmedir. Buna karşılık, yerel dönüştürme, çizilecek belirli bir öğeye uygulanan bir dönüştürmedir.
Genel Dönüşümler
Genel dönüşüm oluşturmak için bir Graphics nesne oluşturun ve ardından özelliğini işleyin Transform . Transform özelliği bir nesnedir, bu nedenle herhangi bir Matrix benze dönüştürme dizisini tutabilir. özelliğinde depolanan dönüştürme, Transform dünya dönüşümü olarak adlandırılır. Graphics sınıfı bileşik bir dünya dönüşümü oluşturmak için çeşitli yöntemler sağlar: MultiplyTransform, RotateTransform, ScaleTransformve TranslateTransform. Aşağıdaki örnek iki kez üç nokta çizer: bir kez dünya dönüşümü oluşturmadan önce ve sonra bir kez. Dönüştürme ilk olarak y yönünde 0,5 faktörüyle ölçeklendirilir, ardından x yönünde 50 birim çevirir ve ardından 30 derece döndürür.
myGraphics.DrawEllipse(myPen, 0, 0, 100, 50);
myGraphics.ScaleTransform(1, 0.5f);
myGraphics.TranslateTransform(50, 0, MatrixOrder.Append);
myGraphics.RotateTransform(30, MatrixOrder.Append);
myGraphics.DrawEllipse(myPen, 0, 0, 100, 50);
myGraphics.DrawEllipse(myPen, 0, 0, 100, 50)
myGraphics.ScaleTransform(1, 0.5F)
myGraphics.TranslateTransform(50, 0, MatrixOrder.Append)
myGraphics.RotateTransform(30, MatrixOrder.Append)
myGraphics.DrawEllipse(myPen, 0, 0, 100, 50)
Aşağıdaki çizimde dönüştürmeye dahil olan matrisler gösterilmektedir.
Dekont
Yukarıdaki örnekte üç nokta, istemci alanının sol üst köşesinde yer alan koordinat sisteminin kaynağı hakkında döndürülür. Bu, üç noktayı kendi merkeziyle döndürmekten farklı bir sonuç üretir.
Yerel Dönüşümler
Yerel dönüştürme, çizilecek belirli bir öğe için geçerlidir. Örneğin, bir GraphicsPath nesnenin bu yolun veri noktalarını dönüştürmenizi sağlayan bir Transform yöntemi vardır. Aşağıdaki örnek, dönüştürme içermeyen bir dikdörtgen ve döndürme dönüştürmesi olan bir yol çizer. (Dünya dönüşümü olmadığını varsayalım.)
Matrix myMatrix = new Matrix();
myMatrix.Rotate(45);
myGraphicsPath.Transform(myMatrix);
myGraphics.DrawRectangle(myPen, 10, 10, 100, 50);
myGraphics.DrawPath(myPen, myGraphicsPath);
Dim myMatrix As New Matrix()
myMatrix.Rotate(45)
myGraphicsPath.Transform(myMatrix)
myGraphics.DrawRectangle(myPen, 10, 10, 100, 50)
myGraphics.DrawPath(myPen, myGraphicsPath)
Çeşitli sonuçlar elde etmek için dünya dönüşümlerini yerel dönüşümlerle birleştirebilirsiniz. Örneğin, dünya dönüşüm kullanarak koordinat sistemini düzeltebilir ve yeni koordinat sisteminde çizilen nesneleri döndürmek ve ölçeklendirmek için yerel dönüşümleri kullanabilirsiniz.
Çıkış noktası istemci alanının sol kenarından 200 piksel ve istemci alanının üst kısmından 150 piksel olan bir koordinat sistemi istediğinizi varsayalım. Ayrıca, ölçü biriminin x ekseni sağa, y ekseni de yukarı doğru olacak şekilde piksel olmasını istediğinizi varsayalım. Varsayılan koordinat sisteminde y ekseni aşağıyı işaret eder, bu nedenle yatay eksen üzerinde bir yansıma gerçekleştirmeniz gerekir. Aşağıdaki çizimde böyle bir yansımanın matrisi gösterilmektedir.
Ardından, sağa doğru 200 birim ve aşağı doğru 150 birim çeviri yapmanız gerektiğini varsayalım.
Aşağıdaki örnek, bir Graphics nesnenin dünya dönüşümünün ayarlanmasıyla az önce açıklanan koordinat sistemini oluşturur.
Matrix myMatrix = new Matrix(1, 0, 0, -1, 0, 0);
myGraphics.Transform = myMatrix;
myGraphics.TranslateTransform(200, 150, MatrixOrder.Append);
Dim myMatrix As New Matrix(1, 0, 0, -1, 0, 0)
myGraphics.Transform = myMatrix
myGraphics.TranslateTransform(200, 150, MatrixOrder.Append)
Aşağıdaki kod (önceki örneğin sonuna yerleştirilir), yeni koordinat sisteminin kaynağında sol alt köşesi olan tek bir dikdörtgenden oluşan bir yol oluşturur. Dikdörtgen, yerel dönüştürme olmadan bir kez ve yerel dönüştürme ile bir kez doldurulur. Yerel dönüştürme, 2 faktörün ardından 30 derece döndürmenin ardından yatay ölçeklendirmeden oluşur.
// Create the path.
GraphicsPath myGraphicsPath = new GraphicsPath();
Rectangle myRectangle = new Rectangle(0, 0, 60, 60);
myGraphicsPath.AddRectangle(myRectangle);
// Fill the path on the new coordinate system.
// No local transformation
myGraphics.FillPath(mySolidBrush1, myGraphicsPath);
// Set the local transformation of the GraphicsPath object.
Matrix myPathMatrix = new Matrix();
myPathMatrix.Scale(2, 1);
myPathMatrix.Rotate(30, MatrixOrder.Append);
myGraphicsPath.Transform(myPathMatrix);
// Fill the transformed path on the new coordinate system.
myGraphics.FillPath(mySolidBrush2, myGraphicsPath);
' Create the path.
Dim myGraphicsPath As New GraphicsPath()
Dim myRectangle As New Rectangle(0, 0, 60, 60)
myGraphicsPath.AddRectangle(myRectangle)
' Fill the path on the new coordinate system.
' No local transformation
myGraphics.FillPath(mySolidBrush1, myGraphicsPath)
' Set the local transformation of the GraphicsPath object.
Dim myPathMatrix As New Matrix()
myPathMatrix.Scale(2, 1)
myPathMatrix.Rotate(30, MatrixOrder.Append)
myGraphicsPath.Transform(myPathMatrix)
' Fill the transformed path on the new coordinate system.
myGraphics.FillPath(mySolidBrush2, myGraphicsPath)
Aşağıdaki çizimde yeni koordinat sistemi ve iki dikdörtgen gösterilmektedir.
Ayrıca bkz.
.NET Desktop feedback
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin