以前提了一个问题,在C#中如何使用TransparentBlt函数去贴位图,已经实现了。
现在的问题是:有一张草地的背景图和一个足球的位图,按button1能将足球背景透明化,然后贴到草地上去。
现在我想按button2,将足球从草地上移除?初步设想,能不能使用BitBlt函数进行一些SRCAND、SRCPAINT等运算,但具体的算法不知如何设计,请高手路过的指点一下,最好能给出一个完整代码函数。万分感谢!(持续关注,1周内急用)
以下是button1事件代码:
IntPtr memdc = CreateCompatibleDC(g.GetHdc());
SelectObject(memdc, zuqiuBmp.GetHbitmap());
Graphics gZQ = Graphics.FromHdc(memdc);
Graphics gCD = Graphics.FromImage(caodiBmp);
IntPtr dcZQ = gZQ.GetHdc();
IntPtr dcCD = gCD.GetHdc();
TransparentBlt(dcCD, 0, 0,50, 50, dcZQ, 0, 0, zuqiuBmp.Width, zuqiuBmp.Height, ParseRGB(Color.White));
gZQ.ReleaseHdc(dcZQ);
gCD.ReleaseHdc(dcCD);
panel_qipan.BackgroundImage = caodiBmp;
现在的问题是:有一张草地的背景图和一个足球的位图,按button1能将足球背景透明化,然后贴到草地上去。
现在我想按button2,将足球从草地上移除?初步设想,能不能使用BitBlt函数进行一些SRCAND、SRCPAINT等运算,但具体的算法不知如何设计,请高手路过的指点一下,最好能给出一个完整代码函数。万分感谢!(持续关注,1周内急用)
以下是button1事件代码:
IntPtr memdc = CreateCompatibleDC(g.GetHdc());
SelectObject(memdc, zuqiuBmp.GetHbitmap());
Graphics gZQ = Graphics.FromHdc(memdc);
Graphics gCD = Graphics.FromImage(caodiBmp);
IntPtr dcZQ = gZQ.GetHdc();
IntPtr dcCD = gCD.GetHdc();
TransparentBlt(dcCD, 0, 0,50, 50, dcZQ, 0, 0, zuqiuBmp.Width, zuqiuBmp.Height, ParseRGB(Color.White));
gZQ.ReleaseHdc(dcZQ);
gCD.ReleaseHdc(dcCD);
panel_qipan.BackgroundImage = caodiBmp;
GDI+不是本身就支持Alpha混合绘图的吗?
你要用过Photoshop你就理解了...
除非是2个图层 你去掉一个 足球图层,显示草地图层
如果你想显示足球,就在草地上加一个图层 画上足球
{
Bitmap BP = default(Bitmap);
if (BP != null) BP.Dispose();
BP = new Bitmap(SourceBitmap);
SX = BP.Width;
SY = BP.Height;
bmpDATA = BP.LockBits(new Rectangle(0, 0, SX, SY), Imaging.ImageLockMode.ReadWrite, Imaging.PixelFormat.Format32bppArgb);
BTSlength = bmpDATA.Stride * BP.Height;
byte[] BTS = new byte[BTSlength + 1];
System.Runtime.InteropServices.Marshal.Copy(bmpDATA.Scan0, BTS, 0, BTSlength);
for (int J = 0; J <= BTSlength - 1; J += 4) {
//BTS(J + 3) = BTS(J + 3) / 100 * TransparentValue
BTS(J + 3) = 100;
}
System.Runtime.InteropServices.Marshal.Copy(BTS, 0, bmpDATA.Scan0, BTSlength);
BP.UnlockBits(bmpDATA);
return BP;
} 使用方法:this.BackGroundImage=GetTransparentBitmap("c:\123.jpg",50)
// 50为透明度,范围在 0-100 之间