なんとなく、ふわっと・・

写真と画像処理関係とひとりごとをなんとなく書き溜めていきたい

LuminanceToAlpha

2008-03-21 23:11:44 | C#(Graphics)

旧ブログからのコード移植、その1。

LuminanceToAlpha は元画像の輝度の反転(255から引いたもの)した値に
比例して任意の色シートのアルファ値を設定する。

色つきのカーボンコピーをつくる感じ。





全コードをしめす。


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using ImageUtils;

namespace LuminanceToAlpha
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public static bool LuminanceToAlpha(Bitmap bmp, bool bStretch,
            Color baseColor, out Bitmap result32)
        {
            result32 = null;

            if (bmp.PixelFormat != PixelFormat.Format24bppRgb)
                return false;

            int w = bmp.Width;
            int h = bmp.Height;

            Bitmap bw = bmp.Clone() as Bitmap;
            ImgUtils.GrayScale(ref bw);
            if (bStretch) ImgUtils.HistoStretch(ref bw);

            result32 = new Bitmap(w, h, PixelFormat.Format32bppArgb);

            Graphics g = Graphics.FromImage(result32);
            g.Clear(baseColor);
            g.Dispose();

            BmpProc8 src = new BmpProc8(bw);
            BmpProc32 dst = new BmpProc32(result32);

            for (int y = 0; y < h; y++)
                for (int x = 0; x < w; x++)
                {
                    dst[x, y, eRGB.a] = (byte)(255 - src[x, y]);
                }
            ImgUtils.CallDispose(dst, src, bw);

            return true;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Bitmap bmp = new Bitmap(@"c:\Home\ImgWork\LASample.png");

            int w = bmp.Width;
            int h = bmp.Height;

            Bitmap tmp;
            Color baseColor;

            Graphics g = this.CreateGraphics();

                baseColor = Color.FromArgb(100, 0, 0);

                LuminanceToAlpha(bmp, true, baseColor, out tmp);            
                g.DrawImage(tmp, 20, 50, w, h);
                tmp.Dispose();


                baseColor = Color.FromArgb(0, 100, 0);

                LuminanceToAlpha(bmp, true, baseColor, out tmp);
                g.DrawImage(tmp, 20 + (w - 50), 50, w, h);
                tmp.Dispose();


                baseColor = Color.FromArgb(0, 0, 100);

                LuminanceToAlpha(bmp, true, baseColor, out tmp);
                g.DrawImage(tmp, 20 + (w - 50) * 2, 50, w, h);
                tmp.Dispose();

            g.Dispose();

            
            bmp.Dispose();
        }
    }
}

Comment    この記事についてブログを書く
« 福寿草 | TOP | Y »

post a comment