旧ブログからのコード移植、その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(); } } }