c#一次绘制对象而不是使用循环

本文关键字:循环 对象 绘制 一次 | 更新日期: 2023-09-27 18:16:27

你好,我正在尝试绘制大约1000个图像和10到100个矩形和椭圆之间。但我需要它们都在加载完成后才出现在屏幕上(不是加载屏幕,而是在游戏或幻灯片中)。例如

texturegrass = MyApp.Properties.Resources.Grass
Rectangle[] rects;
recs = new Rectangle[1000]
for (int i = 0; i < rects.Length; i++)
        {
            g.DrawImage(texturegrass,rects[i]);
        }

这就是我目前所做的但是每个矩形都是由它自己绘制的这导致了闪烁问题

我有双重缓冲的应用程序。我尝试使用并行,但应用程序不断崩溃

我希望你们中的一个能帮助我…


# # *

c#一次绘制对象而不是使用循环

您可以使用Graphics对象在屏幕外创建图像,然后使用屏幕的Graphics对象在屏幕上绘制图像。

var bmp = new Bitmap(MyWidth, CMyHeight);
var gOff = Graphics.FromImage(bmp);
gOff.FillRectangle(new SolidBrush(Color.White), 0, 0, bmp.Width, bmp.Height);
texturegrass = MyApp.Properties.Resources.Grass
Rectangle[] rects = ...;
recs = new Rectangle[1000]
for (int i = 0; i < rects.Length; i++) {
    gOff.DrawImage(texturegrass,rects[i]);
}

此时你可以在屏幕上的Graphic上同时画出bmp

Microsoft:如何在屏幕外绘制图像