相关疑难解决方法(0)

如何提高GDI的DrawImage(Unscaled)的性能?

在我的用户控件的绘图处理程序中,我遍历一组预定义的Bitmap对象,并将它们绘制到客户区:

C#版本:

private void Control_Paint(object sender, PaintEventArgs e) {
    Graphics g = e.Graphics;
    foreach (BitmapObj bmpObj in _bitmapObjCollection) {
        g.DrawImageUnscaled(bmpObj.Bitmap, bmpObj.Location);
    }
}
Run Code Online (Sandbox Code Playgroud)

VB.NET版本:

Private Sub Control_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles MyBase.Paint
    Dim g As Graphics = e.Graphics

    For Each bmpObj As BitmapObj In _bitmapObjCollection
        g.DrawImageUnscaled(bmpObj.Bitmap, bmpObj.Location)
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)

代码工作正常但是当十几个对象添加到集合时开始陷入困境.我的问题是:有没有办法加快速度?是否可以使用Win32 bitblt函数替换DrawImageUnscaled?如果是这样怎么样?

谢谢!

注意:到目前为止,谷歌搜索BitBlt的使用仅产生了我的屏幕截图样本......

c# vb.net performance drawimage bitblt

5
推荐指数
1
解决办法
3891
查看次数

使用C#中的TextureBrush在不同高度开始的平铺图像问题

我试图使用TextureBrush在尺寸宽度= 1000,高度= 16的矩形区域上平铺图像(16x16)以获得像UI一样的条带.

 Rectangle myIconDrawingRectangle = new Rectangle(x, y, 1000, 16);
 using (TextureBrush brush = new TextureBrush(myIcon, WrapMode.Tile))
 {
    e.Graphics.FillRectangle(brush, myIconDrawingRectangle );
 }
Run Code Online (Sandbox Code Playgroud)

当我用x = 0绘制时,y = 0平铺从(0,0)开始按预期发生.

当我用x = 0绘制时,y = 50平铺从(0,50)开始,但绘制矩形不是从图像的开头开始.它从图像的裁剪部分开始,然后重复.

怎么解决这个?

PS:我不想在DrawImage上重复手动循环.

c# tiling image

3
推荐指数
1
解决办法
2819
查看次数

标签 统计

c# ×2

bitblt ×1

drawimage ×1

image ×1

performance ×1

tiling ×1

vb.net ×1