png图片如何做类似PS的颜色叠加效果?

hpygzhx520 2013-02-18 11:18:24
如题,在场景上绘制一个png图片,现在想给这个图片增加一种类似photoshop的颜色叠加的效果,请问怎么处理?谢谢。如果透明度可调那是最好。
...全文
489 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
laviewpbt 2013-02-18
  • 打赏
  • 举报
回复
PS的那种效果,请配个图,因为在PS里涉及到叠加的地方有很多,并且也没有一个地方正好叫颜色叠加。
hpygzhx520 2013-02-18
  • 打赏
  • 举报
回复
png透明区域我不想有叠加的颜色,能做到吗?就是PS的那种效果
assky124 2013-02-18
  • 打赏
  • 举报
回复
OnPaint(e)
{
  e.Graphics.DrawImage(yourPng,xxx);
  Brush brush = new SolidBrush(Color.FromArgb(透明度,Color.Black));
  e.Graphics.FillRectangle(brush,yourPng.Bounds);
}
简单是示意代码,就是在图片上绘制一个半透明层
laviewpbt 2013-02-18
  • 打赏
  • 举报
回复


private void CmdTest_Click(object sender, EventArgs e)
{
BlendBitmap((Bitmap)Pic.Image, Color.Red, 100);
Pic.Invalidate();
}

private void BlendBitmap(Bitmap Bmp, Color FillColor, int Opacity = 255)
{
int X, Y,Width,Height;
byte* Pointer;
int A1,B1,G1,R1;
int A2,B2,G2,R2,BlendAlpha;
BitmapData BmpData = Bmp.LockBits(new Rectangle(0, 0, Bmp.Width, Bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
/* LockBits 在第一个参数和图像一样大,以及读取格式和原始一样的情况
* 下,调用函数的时间为0,且每次调用后BitmapData的Scan0都相同,而在
* 其他的大部分情况下同样参数调用该函数返回的Scan0都不同,这就说明在
* 在程序内部,GDI+为在创建图像时还是分配了和对应位图一样大小内存空间,
* 这样我们就可以再加载时调用一次该函数,并记住Scan0的值,然后直接用
* 指针操作这一片区域,就相当于操作了图像。而不用每次都LOCK和UNLOCK了
* 从这个层次上说,该函数和GetDibits类似。
*/
A2=Opacity;B2=FillColor.B;G2=FillColor.G;R2=FillColor.R;
Width = Bmp.Width; Height = Bmp.Height;
for (Y=0;Y<Height;Y++)
{
Pointer = (byte *) BmpData.Scan0+ Y * BmpData.Stride;
for (X=0;X<Width;X++)
{
B1 = * Pointer ;
G1= *(Pointer+1);
R1= *(Pointer+2);
A1= *(Pointer+3);

if ((A1==255) && (A2==255))
{
*Pointer = (byte)(B1 + (B2 - B1) * A2 / 255);
*(Pointer+1) = (byte)(G1 + (G2 - G1) * A2 / 255);
*(Pointer+2) = (byte)(R1 + (R2 - R1) * A2 / 255);
}
else
{
BlendAlpha = A1 * A2 / 255;
*Pointer =(byte) ((B1 * A1 + B2 * A2 - BlendAlpha * B1) / 255 );
*(Pointer+1) =(byte) ((G1 * A1 + G2 * A2 - BlendAlpha * G1) / 255 );
*(Pointer+2) =(byte) ((R1 * A1 + R2 * A2 - BlendAlpha * R1 ) / 255 );
}
Pointer += 4;
}
}
Bmp.UnlockBits(BmpData);
}
}






assky124 2013-02-18
  • 打赏
  • 举报
回复
MSDN上搜搜 ColorMatrix,调整颜色矩阵,效果类似
hpygzhx520 2013-02-18
  • 打赏
  • 举报
回复
楼上终于出现了,图像处理的行家!

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧