在中为位图绘制椭圆时,我遇到了一些问题。NET 4.0 C#WinForms应用程序运行在Raspbian 9(stretch)上的mono 4.6.2上。
该方法在黑屏上生成5个指定直径的白色圆圈的位图。屏幕每个角落一个圆圈,中间一个圆圈。位图旨在包含整个屏幕,因此我通过屏幕将位图的大小获取为矩形。Bounds(),这又给了我Res.Width和Res.Height。
此代码在中的Windows中正常工作。NET(这是它最初编写和测试的内容),但在Raspbian上通过mono运行exe,只需用白色填充位图。我还发现,在mono for Windows(v5.10.0.160)中运行时,生成的圆圈最终会比运行时小。净额。
private Bitmap GenerateCirclesBitmap(int diam)
{
Bitmap bmp = GenerateColorBitmap(Color.Black);
Graphics g = Graphics.FromImage(bmp);
g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
Brush whiteBrush = new SolidBrush(Color.White);
g.FillEllipse(whiteBrush, diam/7, diam/7, diam, diam); //Top Left Corner
g.FillEllipse(whiteBrush, diam/7, (Res.Height - diam)-(diam/7), diam, diam); //Bottom Left Corner
g.FillEllipse(whiteBrush, (Res.Width - diam) - (diam / 7), (Res.Height - diam) - (diam / 7), diam, diam); //Bottom Right Corner
g.FillEllipse(whiteBrush, (Res.Width - diam) - (diam / 7), diam/7, diam, diam); //Top Right Corner
g.FillEllipse(whiteBrush, (Res.Width / 2) - (diam / 2), (Res.Height / 2) - (diam / 2), diam, diam); //Center
g.DrawImage(bmp, Res.Width, Res.Height);
return bmp;
}
我想这可能是屏幕尺寸、分辨率宽度和/或分辨率高度的问题,但如果是这样的话,我希望我生成色条的方法也会有问题。然而,该代码在mono和in的两个版本上都能正常工作(8个色条,每个色条占总屏幕宽度的1/8)。NET,这让我觉得Res.Width是可以的:
private Bitmap GenerateBarsBitmap(Color bar1, Color bar2, Color bar3, Color bar4, Color bar5, Color bar6)
{
Bitmap bmp = GenerateColorBitmap(Color.Black);
int barwidth = Res.Width / 8;
Color[] colors = new Color[8];
Brush b = new SolidBrush(Color.White);
Graphics g = Graphics.FromImage(bmp);
colors[0] = Color.White;
colors[1] = bar1;
colors[2] = bar2;
colors[3] = bar3;
colors[4] = bar4;
colors[5] = bar5;
colors[6] = bar6;
colors[7] = Color.Black;
g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
for (int colornum = 0; colornum < colors.Length; colornum++)
{
b = new SolidBrush(colors[colornum]);
g.FillRectangle(b, barwidth * colornum, 0, barwidth, Res.Height);
b.Dispose();
}
return bmp;
}
如有任何想法或见解,将不胜感激。谢谢