日期:2014-05-18  浏览次数:21010 次

关于C#Alpha图像混合问题
在网上搜索了好久关于Alpha图像混合文章,但讲解都是基于C/C++,我也想原理大概都应该是互通的,可有些问题还是不太明白
首先网上的文章的介绍,关于alpha混合都是针对于某一个像素点,首先选定某一个像素点,得到该点的ARGB值然后通过一个公式:
  DstColor.b=(DstColor.b*(255-Alpha) + SrcColor.b*Alpha)/255;
计算出该点混合后的A,R,G,B值,在重新绘制在图像上,然后再针对该算法进行优化

可是C#如何取得某一像素点的ARGB值,然后在将该混合后的AGRB绘制在图像上呢,这点应该和C++或者C的Alpha处理有些区别吧。
然后就是我每次都是针对图像1进行固定大小的Bitmap裁剪,想把裁剪后的图像绘制到图像2上,但这样裁剪会把图像1中的背景色(如白色或者其他的颜色)也裁剪进来,网上倒是有种针对性方法,在图像1中的背景色使用在图像中不存在的颜色,然后再裁剪时将背景颜色过滤,但这个过滤也需要一个一个像素点的过滤吧

所以综上问题的关键:在C#中如何操控图像的某一个像素点,或者我上面的理解错误还有其他的正确方法

------解决方案--------------------
怎麼不用專業控件

http://ufo-crackerx.blog.163.com/blog/static/113078778201111158561961/
------解决方案--------------------
图像1要事先进行Alpha处理,该处理可以是人工调整,也可以是电脑智能调整。

人工调整,就是用图像处理工具,把你认为‘背景色’的地方变透明。
而智能调整,就是写一段程序,由程序进行‘背景色’判断,并相应进行Alpha调整。
------解决方案--------------------
设置Alpha本身很容易,比较困难的是‘背景色’的判断。当然如果背景色恰巧都是白色,倒是很容易:
C# code

Color color = bmp.GetPixel(x, y);
if( color.R == 255 && color.G == 255 && color.B == 255)
{
   bmp.SetPixel(x, y, Color.Transparent);
}