在网上搜索了好久关于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#中如何操控图像的某一个像素点,或者我上面的理解错误还有其他的正确方法

解决方案 »

  1.   

    怎麼不用專業控件http://ufo-crackerx.blog.163.com/blog/static/113078778201111158561961/
      

  2.   

    图像1要事先进行Alpha处理,该处理可以是人工调整,也可以是电脑智能调整。人工调整,就是用图像处理工具,把你认为‘背景色’的地方变透明。
    而智能调整,就是写一段程序,由程序进行‘背景色’判断,并相应进行Alpha调整。
      

  3.   

    设置Alpha本身很容易,比较困难的是‘背景色’的判断。当然如果背景色恰巧都是白色,倒是很容易:Color color = bmp.GetPixel(x, y);
    if( color.R == 255 && color.G == 255 && color.B == 255)
    {
       bmp.SetPixel(x, y, Color.Transparent);
    }