我想知道这是否可能: 我得到了一个c#应用程序,其中包含一个显示组件,其中包含在表单上绘制的大约11000个圆圈。
我想要实现的是能够在该显示器上绘制文本,但不能使用"真实"像素,但使用在窗体上绘制的圆(矩形)作为像素。
修改1:
在c#中绘制文本时,你会使用类似Graphics.DrawString(...)
的东西,给方法一个矩形(所以坐标),其中应该绘制文本。然后使用屏幕在该矩形中绘制该文本像素。我想要做的是绘制文本,但不使用屏幕像素,但我的显示组成的自定义像素。
修改2
用于在表单上绘制圆圈的方法; Circles
是一个由Circle
个对象组成的列表,其中circleRectangle
返回应绘制圆圈的坐标,Filled
告诉方法是否应填充圆圈。
public void DrawCircles(Graphics g)
{
graphics = g;
graphics.SmoothingMode =System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
Pen pen = new Pen(Color.Black, penthickness);
SolidBrush brush = new SolidBrush(Color.White);
for (int j = 0; j < Circles.Count;j++ )
{
graphics.DrawEllipse(pen, Circles[j].CircleRectangle);
if (Circles[j].Filled)
brush.Color = fillColor;
else
brush.Color = Color.White;
graphics.FillEllipse(brush, Circles[j].CircleRectangle);
}
}
这是可能的,如果是的话,我该怎么做?
答案 0 :(得分:3)
您可以使用DrawText方法在不可见的BitMap上书写,然后扫描位图的像素并打开相应的圆圈。
上周是否使用了DataGridView的单元格。真的很容易。
以下是一些代码:
public void drawText(string text, Font drawFont)
{
Bitmap bmp = new Bitmap(canvasWidth, canvasHeight);
Graphics G = Graphics.FromImage(bmp);
SolidBrush brush = new SolidBrush(paintColor);
Point point = new Point( yourOriginX, yourOriginY );
G.DrawString(text, drawFont, brush, point);
for (int x = 0; x < canvasWidth; x++)
for (int y = 0; y < canvasHeight; y++)
{
Color pix = bmp.GetPixel(x, y);
setCell(x, y, pix); //< -- set your custom pixels here!
}
bmp.Dispose();
brush.Dispose();
G.Dispose();
}
修改:您可以使用尺寸和原点作为DrawString,当然