1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
//Ajout :
//-3 picturebox de meme taille...(picFrom,picMask,picTo).
//-un bouton en haut du form nomme apply
//-un label en bas du form
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;
namespace WinMaskImage
{
public partial class frmColorMap : Form
{
public frmColorMap()
{
InitializeComponent();
// image source auquel sera applique le masque...
picFrom.BackColor = Color.Transparent;
// image destination finale apres applique du masque...
picTo.BackColor = Color.Transparent;
// image masque
picMask.BackColor = Color.Transparent;
// size mode à normal des 3 pics
picFrom.SizeMode = PictureBoxSizeMode.Zoom;
picTo.SizeMode = PictureBoxSizeMode.Zoom;
picMask.SizeMode = PictureBoxSizeMode.Zoom;
}
//chargement des images en resources
private void frmColorMap_Load(object sender, EventArgs e)
{
//image source
picFrom.Image = WinMaskImage.Properties.Resources.Nenuphars;
//image mask
picMask.Image = WinMaskImage.Properties.Resources.Coucher_de_soleil;
//image destination à creer
picTo.Image = null;
// image d'arrier plan dans picTo pour mieux voir l'effet
// ne fait pas partie du image destination final
picTo.BackgroundImage = WinMaskImage.Properties.Resources.backgroundwhite;
picTo.BackgroundImageLayout = ImageLayout.Stretch;
}
//click_mouse pour selection du color de transparence du mask
private void picMask_MouseClick(object sender, MouseEventArgs e)
{
//choix de couleur sur le bitmap de masque
Bitmap bmpMask = (Bitmap)picMask.Image;
Color choiceColor = bmpMask.GetPixel(e.X, e.Y);
label2.BackColor = choiceColor;
//ImageAttributes peut setter le color de transparence choisi....
ImageAttributes attr = new ImageAttributes();
attr.SetColorKey(choiceColor ,Color.Transparent);
// bmp temporaire avec taille ajuste = taille image source (picFrom)
// un graphics issu de ce bmp
Bitmap tempBitmap = new Bitmap(picFrom.Image.Width, picFrom.Image.Height);
Graphics gr = Graphics.FromImage(tempBitmap);
// Redessine image mask mis à l'echelle et rectifie avec le ImageAttributes
// dan tempBitmap....
Rectangle destRect = new Rectangle(0, 0, tempBitmap.Width, tempBitmap.Height);
gr.DrawImage(bmpMask, destRect, 0, 0, bmpMask.Width, bmpMask.Height,
GraphicsUnit.Pixel, attr);
//dispose object graphics
gr.Dispose();
// affecte ce tempBitmap à picMask
picMask.Image = tempBitmap;
}
//nb: Cette ligne de code ne fonctionnera pas comme attendu
//if(bmpMask.bmpMask.GetPixel(i, j)==Color.Transparent)
//application du mask avec setpixel
//remarquez : picTo.Image , picMask.Image et picto.Image =>identique Size
private void btnApplyMask_Click(object sender, EventArgs e)
{
// nouveau bmp à partir de image source
// (pas de ref sinon source sera altere....)
Bitmap bmpTo = new Bitmap(picFrom.Image);
// un ref bmp sur image mask oui
Bitmap bmpMask = (Bitmap)picMask.Image;
//masquage du bmp avec bmpMask
for (int i = 0; i < bmpMask.Width; i++)
{
for (int j = 0; j < bmpMask.Height; j++)
{
if (bmpMask.GetPixel(i, j).A == 0)
{
// composante alpha =0 => pixel transparent
bmpTo.SetPixel(i, j, Color.Transparent);
}
}
}
// affecte bmpTo à picTo
picTo.Image = bmpTo;
// save if necessary
picTo.Image.Save("test.bmp");
}
//reset des PictureBox.Image pour un autre masquage
private void btnReset_Click(object sender, EventArgs e)
{
picFrom.Image = WinMaskImage.Properties.Resources.Nenuphars;
picMask.Image = WinMaskImage.Properties.Resources.Coucher_de_soleil;
picTo.BackgroundImage = WinMaskImage.Properties.Resources.backgroundwhite;
picTo.BackgroundImageLayout = ImageLayout.Stretch;
picTo.Image = null;
}
}
} |
Partager