gpt4 book ai didi

c# - AND C# 中的两个位图

转载 作者:太空宇宙 更新时间:2023-11-03 22:19:33 24 4
gpt4 key购买 nike

我正在尝试像这样对两个位图进行 AND 操作:

        [DllImport("gdi32.dll")]        public static extern int SetROP2(IntPtr hDC, int nDrawMode);        const int SRCAND = 0x008800C6;    // AND raster op.        lock (g.Clip)        {            IntPtr pDC = g.GetHdc ();            SetROP2 (pDC, SRCAND);            g.DrawImageUnscaled (currentBitmap, bound.Location);            g.ReleaseHdc (pDC);        }

但是我从 Draw 语句中得到一个“对象当前正在别处使用”的异常。在 Draw 语句运行之前移动 ReleaseHdc 语句,但不使用指定的光栅操作。

LockBits 方法太慢了,因为它复制了整个位图两次,其中一个位图很大,而且每秒必须发生很多次。

有什么想法可以让 .NET 进入 ANDing 位图吗?

最佳答案

    lock (g.Clip)

这行不通。您收到此异常是因为您在多个线程中使用位图。我猜是另一个绘制位图的线程。为使其工作,您必须确保两个线程不能同时使用位图。这确实需要 lock 关键字。但是在同一个 锁对象上。您使用的 Graphics 实例不会相同。锁不起作用。

创建两个线程都使用的专用锁定对象。

关于c# - AND C# 中的两个位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3679182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com