Graphics.TranslateTransform是一个用来移动绘图坐标系的方法,可以将绘图坐标系沿着指定的X和Y轴方向平移一定的距离。它的语法如下:
public void TranslateTransform(float dx, float dy);
其中,dx和dy分别表示在X轴和Y轴方向上移动的距离。如果dx和dy为正数,那么绘图坐标系会向右和向下移动;如果dx和dy为负数,那么绘图坐标系会向左和向上移动。
如果需要在多个方向上移动绘图坐标系,可以多次调用TranslateTransform方法。例如,要将绘图坐标系向右下方移动10个像素,可以这样写:
graphics.TranslateTransform(10, 10);
在调用TranslateTransform方法之后,所有后续的绘图操作都会在移动后的坐标系中进行。如果需要还原坐标系到原始状态,可以使用Graphics.ResetTransform方法。例如:
graphics.ResetTransform();
需要注意的是,TranslateTransform方法对于所有后续的绘图操作都是有效的,因此必须在不需要移动坐标系的时候及时还原坐标系。否则,后续的绘图操作可能会出现错误。
Graphics.RotateTransform是一个用来旋转绘图坐标系的方法,可以将绘图坐标系绕着指定的中心点旋转一定的角度。它的语法如下:
public void RotateTransform(float angle);
其中,angle表示旋转的角度,单位为度。如果angle为正数,那么绘图坐标系会顺时针旋转;如果angle为负数,那么绘图坐标系会逆时针旋转。
如果需要指定旋转的中心点,可以使用另一个重载的RotateTransform方法。它的语法如下:
public void RotateTransform(float angle, PointF point);
其中,angle表示旋转的角度,单位为度;point表示旋转的中心点。例如,要将绘图坐标系绕着原点逆时针旋转30度,可以这样写:
graphics.RotateTransform(-30);
在调用RotateTransform方法之后,所有后续的绘图操作都会在旋转后的坐标系中进行。如果需要还原坐标系到原始状态,可以使用Graphics.ResetTransform方法。例如:
graphics.ResetTransform();
需要注意的是,RotateTransform方法对于所有后续的绘图操作都是有效的,因此必须在不需要旋转坐标系的时候及时还原坐标系。否则,后续的绘图操作可能会出现错误。
Graphics.ScaleTransform方法是一个用来缩放绘图坐标系的方法,可以将绘图坐标系沿着X和Y轴方向分别缩放一定的比例。它的语法如下:
public void ScaleTransform(float scaleX, float scaleY);
其中,scaleX和scaleY分别表示在X轴和Y轴方向上的缩放比例。如果scaleX和scaleY为1,那么绘图坐标系不会发生变化;如果scaleX和scaleY小于1,那么绘图坐标系会缩小;如果scaleX和scaleY大于1,那么绘图坐标系会放大。
如果需要指定缩放的中心点,可以使用另一个重载的ScaleTransform方法。它的语法如下:
public void ScaleTransform(float scaleX, float scaleY, float centerX, float centerY);
其中,scaleX和scaleY分别表示在X轴和Y轴方向上的缩放比例;centerX和centerY表示缩放的中心点。例如,要将绘图坐标系沿着X轴方向缩小一半,可以这样写:
graphics.ScaleTransform(0.5f, 1);
在调用ScaleTransform方法之后,所有后续的绘图操作都会在缩放后的坐标系中进行。如果需要还原坐标系到原始状态,可以使用Graphics.ResetTransform方法。例如:
graphics.ResetTransform();
需要注意的是,ScaleTransform方法对于所有后续的绘图操作都是有效的,因此必须在不需要缩放坐标系的时候及时还原坐标系。否则,后续的绘图操作可能会出现错误。
Graphics.DrawImage是一个用来绘制图像的方法,可以将一个图像绘制到指定的位置和大小。它的语法如下:
public void DrawImage(Image image, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit);
其中,image表示要绘制的图像;destRect表示目标矩形,即要将图像绘制到哪个位置和大小;srcRect表示源矩形,即要从图像中绘制哪个部分;srcUnit表示源矩形的单位,通常为像素。
如果要将整个图像绘制到目标矩形中,可以将srcRect设置为图像的整个区域,例如:
graphics.DrawImage(image, destRect, image.GetBounds(GraphicsUnit.Pixel), GraphicsUnit.Pixel);
如果要将图像缩放到目标矩形大小,可以先将srcRect设置为图像的整个区域,然后再调用Graphics.ScaleTransform方法对绘图坐标系进行缩放,例如:
graphics.DrawImage(image, destRect, image.GetBounds(GraphicsUnit.Pixel), GraphicsUnit.Pixel); graphics.ScaleTransform(destRect.Width / image.Width, destRect.Height / image.Height);
在调用DrawImage方法之前,可以使用Graphics.SmoothingMode、Graphics.InterpolationMode等属性来设置绘图的平滑模式和插值模式。例如,要使用高质量的平滑模式和插值模式绘制图像,可以这样写:
graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.DrawImage(image, destRect, image.GetBounds(GraphicsUnit.Pixel), GraphicsUnit.Pixel);
需要注意的是,如果目标矩形的宽度或高度小于源矩形的宽度或高度,那么图像会被裁剪;如果目标矩形的宽度或高度大于源矩形的宽度或高度,那么图像会被拉伸。因此,要根据实际需求来设置目标矩形的大小和源矩形的位置和大小。
C# Graphics类的Save方法可以将绘制的图形保存到指定的文件中。该方法有多个重载形式,最常用的形式是:
public void Save(string filename, ImageFormat format);
其中,filename为要保存的文件名,format为图像格式,例如JPEG、PNG、BMP等。下面是一个示例:
using System.Drawing;
using System.Drawing.Imaging;
// 创建一个位图对象
Bitmap bitmap = new Bitmap(400, 300);
// 创建一个画布对象
Graphics g = Graphics.FromImage(bitmap);
// 在画布上绘制一些图形
g.DrawLine(Pens.Red, new Point(0, 0), new Point(400, 300));
g.DrawRectangle(Pens.Blue, new Rectangle(100, 100, 200, 100));
g.DrawString("Hello, world!", new Font("Arial", 16), Brushes.Black, new PointF(50, 50));
// 将绘制的图形保存到文件中
bitmap.Save("test.png", ImageFormat.Png);
在上述代码中,我们首先创建了一个位图对象和一个画布对象,然后在画布上绘制了一些图形。最后,调用Save方法将绘制的图形保存为PNG格式的文件。如果要保存为其他格式,只需将ImageFormat.Png替换为对应的格式即可。注意,在使用完Graphics对象之后,应该调用Dispose方法释放资源。
C# Graphics类的Restore方法可以恢复图形状态,撤销上一次绘制操作。当我们在绘制图形时调用了Graphics对象的变换方法(如TranslateTransform、ScaleTransform、RotateTransform等),这些变换会对后续的绘制操作产生影响。如果需要撤销这些变换,可以使用Restore方法恢复到之前的状态。
C# Graphics类的Clear方法可以清除图形表面,填充指定的颜色。该方法有多个重载形式,最常用的形式是:
public void Clear(Color color);
其中,color为要填充的颜色。下面是一个示例:
using System.Drawing;
// 创建一个位图对象
Bitmap bitmap = new Bitmap(400, 300);
// 创建一个画布对象
Graphics g = Graphics.FromImage(bitmap);
// 清除画布表面,填充指定的颜色
g.Clear(Color.White);
// 在画布上绘制一些图形
g.DrawLine(Pens.Red, new Point(0, 0), new Point(400, 300));
g.DrawRectangle(Pens.Blue, new Rectangle(100, 100, 200, 100));
g.DrawString("Hello, world!", new Font("Arial", 16), Brushes.Black, new PointF(50, 50));
// 释放资源
g.Dispose();
bitmap.Save("test.png", ImageFormat.Png);
在上述代码中,我们首先创建了一个位图对象和一个画布对象,然后调用Clear方法清除画布表面,并填充白色。接着,在画布上绘制了一些图形。最后,调用Dispose方法释放资源,并将绘制的图形保存为PNG格式的文件。
C# Graphics.DrawLine是一个用于绘制直线的方法。它是从Graphics类中派生出来的,因此您需要实例化Graphics对象才能使用该方法。
DrawLine方法有几个重载形式,但最基本的形式需要四个参数:Pen对象、起点坐标(x1, y1)、终点坐标(x2, y2)。Pen对象定义了线条的属性,如颜色、宽度等。
以下是一个使用DrawLine方法绘制一条直线的示例:
private void Form1_Paint(object sender, PaintEventArgs e)
{
Pen pen = new Pen(Color.Black, 2);
e.Graphics.DrawLine(pen, 10, 10, 100, 100);
}
在这个示例中,我们创建了一个黑色宽度为2像素的Pen对象,并调用Graphics对象的DrawLine方法来绘制一条从(10,10)到(100,100)的直线。
C# Graphics.DrawRectangle是一个用于绘制矩形的方法。它也是从Graphics类中派生出来的,因此您需要实例化Graphics对象才能使用该方法。
DrawRectangle方法有几个重载形式,但最基本的形式需要四个参数:Pen对象、左上角坐标(x, y)、宽度和高度。Pen对象定义了矩形边框的属性,如颜色、宽度等。
以下是一个使用DrawRectangle方法绘制一个矩形的示例:
private void Form1_Paint(object sender, PaintEventArgs e)
{
Pen pen = new Pen(Color.Black, 2);
Rectangle rect = new Rectangle(10, 10, 100, 100);
e.Graphics.DrawRectangle(pen, rect);
}
C# Graphics.DrawEllipse是一个用于绘制椭圆的方法。它也是从Graphics类中派生出来的,因此您需要实例化Graphics对象才能使用该方法。
DrawEllipse方法有几个重载形式,但最基本的形式需要四个参数:Pen对象、左上角坐标(x, y)、宽度和高度。Pen对象定义了椭圆边框的属性,如颜色、宽度等。
以下是一个使用DrawEllipse方法绘制一个椭圆的示例:
private void Form1_Paint(object sender, PaintEventArgs e)
{
Pen pen = new Pen(Color.Black, 2);
Rectangle rect = new Rectangle(10, 10, 100, 200);
e.Graphics.DrawEllipse(pen, rect);
}
在这个示例中,我们创建了一个黑色宽度为2像素的Pen对象,并创建一个Rectangle对象表示左上角坐标为(10,10),宽度为100,高度为200的矩形,然后调用Graphics对象的DrawEllipse方法来绘制这个椭圆。
C# Graphics.DrawPolygon是一个用于绘制多边形的方法。它也是从Graphics类中派生出来的,因此您需要实例化Graphics对象才能使用该方法。
DrawPolygon方法有几个重载形式,但最基本的形式需要两个参数:Pen对象和PointF数组。Pen对象定义了多边形边框的属性,如颜色、宽度等。而PointF数组则包含了多边形各个顶点的坐标。
以下是一个使用DrawPolygon方法绘制一个三角形的示例:
private void Form1_Paint(object sender, PaintEventArgs e)
{
Pen pen = new Pen(Color.Black, 2);
PointF[] points = { new PointF(100, 100), new PointF(150, 50), new PointF(200, 100) };
e.Graphics.DrawPolygon(pen, points);
}
在这个示例中,我们创建了一个黑色宽度为2像素的Pen对象,并创建了一个包含三个顶点坐标的PointF数组,然后调用Graphics对象的DrawPolygon方法来绘制这个三角形。
C#中的Graphics.DrawString方法可以用于在指定位置绘制指定字符串。该方法通常与Graphics对象一起使用,该对象表示要在其上绘制的图形表面。
下面是Graphics.DrawString方法的语法:
public void DrawString(string s, Font font, Brush brush, float x, float y);
参数说明:
此外,还有其他重载版本的DrawString方法,它们可以接受不同的参数来控制字符串的布局、对齐方式、格式等。
C#中的Graphics.FillRectangle方法可以用于在指定矩形内绘制填充颜色。
下面是Graphics.FillRectangle方法的语法:
public void FillRectangle(Brush brush, float x, float y, float width, float height);
参数说明:
此外,还有其他重载版本的FillRectangle方法,它们可以接受不同的参数来控制填充颜色、矩形的圆角半径等。
C#中的Graphics.FillEllipse方法可以用于在指定矩形内绘制填充椭圆。
下面是Graphics.FillEllipse方法的语法:
public void FillEllipse(Brush brush, float x, float y, float width, float height);
参数说明:
此外,还有其他重载版本的FillEllipse方法,它们可以接受不同的参数来控制填充颜色、椭圆的圆角半径等。
C# Graphics.FillPolygon 方法用于填充多边形。
方法语法如下:
public void FillPolygon (System.Drawing.Brush brush, System.Drawing.Point[] points);
其中,参数 brush 表示要用于绘制多边形的画刷(Brush),参数 points 是一个包含多边形顶点坐标的数组。顶点坐标按照连接顺序传递,即多边形的第一个点和最后一个点应该是相邻的。
以下是一个示例:
// 创建画布
Bitmap bmp = new Bitmap(300, 300);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.White);
// 绘制一个三角形
Point[] points = { new Point(50, 50), new Point(150, 50), new Point(100, 150) };
SolidBrush brush = new SolidBrush(Color.Red);
g.FillPolygon(brush, points);
// 将图像保存为文件
bmp.Save("triangle.png", ImageFormat.Png);
这段代码将创建一个大小为 300x300 的空白画布,并在上面绘制一个红色的三角形。最后将整个画布保存为一个 PNG 图像文件。
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow
我的问题的一个例子是体育游戏。一场体育比赛有两支球队,一支主队和一支客队。我的事件记录模型如下:classTeam"Team"has_one:away_team,:class_name=>"Team"end我希望能够通过游戏访问一个团队,例如:Game.find(1).home_team但我收到一个单元化常量错误:Game::team。谁能告诉我我做错了什么?谢谢, 最佳答案 如果Gamehas_one:team那么Rails假设您的teams表有一个game_id列。不过,您想要的是games表有一个team_id列,在这种情况下
我正在写一篇关于在Ruby中几乎一切都是对象的博客文章,我试图通过以下示例来展示这一点:classCoolBeansattr_accessor:beansdefinitialize@bean=[]enddefcount_beans@beans.countendend所以从类中我们可以看出它有4个方法(当然,除非我错了):它可以在创建新实例时初始化一个默认的空bean数组它可以计算它有多少个bean它可以读取它有多少个bean(通过attr_accessor)它可以向空数组写入(或添加)更多bean(也通过attr_accessor)但是,当我询问类本身它有哪些实例方法时,我没有看到默认
我认为我的问题最好用一个例子来描述。假设我有一个名为“Thing”的简单模型,它有一些简单数据类型的属性。像...Thing-foo:string-goo:string-bar:int这并不难。数据库表将包含具有这三个属性的三列,我可以使用@thing.foo或@thing.bar之类的东西访问它们。但我要解决的问题是当“foo”或“goo”不再包含在简单数据类型中时会发生什么?假设foo和goo代表相同类型的对象。也就是说,它们都是“Whazit”的实例,只是数据不同。所以现在事情可能看起来像这样......Thing-bar:int但是现在有一个新的模型叫做“Whazit”,看起来
我理解(我认为)Ruby中类变量和类的实例变量之间的区别。我想知道如何从该类外部访问该类的实例变量。从内部(即在类方法中而不是实例方法中),它可以直接访问,但是从外部,有没有办法做MyClass.class.[@$#]variablename?我没有任何具体原因要这样做,只是学习Ruby并想知道是否可行。 最佳答案 classMyClass@my_class_instance_var="foo"class上述yield:>>foo我相信Arkku演示了如何从类外部访问类变量(@@),而不是类实例变量(@)。我从这篇文章中提取了上述内
我目前对后台队列不太满意。我正在尝试让Resque工作。我已经安装了redis和Resquegem。Redis正在运行。一个worker正在运行(rakeresque:workQUEUE=simple)。使用Web界面,我可以看到工作人员正在运行并等待工作。当我运行“rakeget_updates”时,作业已排队但失败了。我已经用defself.perform和defperform试过了。发条.raketask:get_updates=>:environmentdoResque.enqueue(GetUpdates)end类文件(app/workers/get_updates.rb)c
我正在学习Ruby,遇到了inject。我正处于理解它的风口浪尖,但当我是那种需要真实世界的例子来学习一些东西的人时。我遇到的最常见的例子是人们使用inject来添加一个(1..10)范围的总和,我不太关心这个。这是一个任意的例子。在实际程序中我会用它做什么?我正在学习,所以我可以继续使用Rails,但我不必有一个以Web为中心的示例。我只需要一些我可以全神贯注的目标。谢谢大家。 最佳答案 inject有时可以通过它的“其他”名称reduce更好地理解。它是一个对Enumerable进行操作(迭代一次)并返回单个值的函数。它有许多有
这个问题在这里已经有了答案:Inrubyhowtouseclasslevellocalvariable?(arubynewbie'squestion)(4个答案)关闭6年前。我注意到以下代码在语法上是正确的:classFoobar=3end现在,我知道实例变量由@访问,类变量由@@访问,但我不知道在哪里bar存储在这种情况下或如何访问它。如何找到bar的范围?