Csharp/C Sharp/2D Graphics/Blend
Версия от 15:31, 26 мая 2010; (обсуждение)
Blend Alpha
/*
GDI+ Programming in C# and VB .NET
by Nick Symmonds
Publisher: Apress
ISBN: 159059035X
*/
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Collections;
using System.ruponentModel;
using System.Windows.Forms;
using System.Data;
namespace Blend_c
{
public class Blend : System.Windows.Forms.Form
{
private System.Windows.Forms.HScrollBar AlphaScroll;
private System.Windows.Forms.HScrollBar GammaScroll;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ruponentModel.Container components = null;
private int AlphaFactor = 255;
private float GammaFactor = 1.0f;
private Rectangle R = new Rectangle(40, 20, 100, 100 );
private Image I = Image.FromFile("Colorbars.jpg");
private int ImWidth;
private int ImHeight;
private ImageAttributes Ia = new ImageAttributes();
public Blend()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
AlphaScroll.Minimum = 20;
AlphaScroll.Maximum = 245;
AlphaScroll.SmallChange = 5;
AlphaScroll.LargeChange = 5;
AlphaScroll.Left = R.Left;
AlphaScroll.Width = R.Width;
AlphaScroll.Top = R.Bottom;
GammaScroll.Minimum=1;
GammaScroll.Maximum = 50;
GammaScroll.SmallChange=1;
GammaScroll.LargeChange=5;
GammaScroll.Left = R.Left;
GammaScroll.Top = R.Top - GammaScroll.Height;
GammaScroll.Width = R.Width;
ImWidth = I.Width;
ImHeight = I.Height;
AlphaScroll.Value = (AlphaScroll.Maximum-AlphaScroll.Minimum )/2;
GammaScroll.Value = (GammaScroll.Maximum-GammaScroll.Minimum )/2;
AlphaFactor = AlphaScroll.Value;
GammaFactor = (float)GammaScroll.Value / 10;
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
if ( I != null )
I.Dispose();
if ( Ia != null )
Ia.Dispose();
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.AlphaScroll = new System.Windows.Forms.HScrollBar();
this.GammaScroll = new System.Windows.Forms.HScrollBar();
this.SuspendLayout();
//
// AlphaScroll
//
this.AlphaScroll.Location = new System.Drawing.Point(32, 128);
this.AlphaScroll.Maximum = 255;
this.AlphaScroll.Name = "AlphaScroll";
this.AlphaScroll.Size = new System.Drawing.Size(160, 16);
this.AlphaScroll.TabIndex = 1;
this.AlphaScroll.Scroll += new System.Windows.Forms.ScrollEventHandler(this.AlphaScroll_Scroll);
//
// GammaScroll
//
this.GammaScroll.Location = new System.Drawing.Point(32, 8);
this.GammaScroll.Name = "GammaScroll";
this.GammaScroll.Size = new System.Drawing.Size(160, 16);
this.GammaScroll.TabIndex = 2;
this.GammaScroll.Scroll += new System.Windows.Forms.ScrollEventHandler(this.GammaScroll_Scroll);
//
// Blend
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.GammaScroll,
this.AlphaScroll});
this.Name = "Blend";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Blend";
this.Load += new System.EventHandler(this.Blend_Load);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Blend());
}
private void Blend_Load(object sender, System.EventArgs e)
{
}
protected override void OnPaint(PaintEventArgs e)
{
AlphaBlend(e.Graphics);
base.OnPaint(e);
}
private void AlphaBlend( Graphics G )
{
//AlphaFactor is variable depeneding upon scroll bars
Pen P = new Pen( Color.FromArgb (AlphaFactor, 200, 0, 100 ), 20);
Bitmap bmp = new Bitmap( 120, 120 );
Graphics G2 = Graphics.FromImage(bmp);
Brush B = new SolidBrush(Color.FromArgb( AlphaFactor, 50, 200, 50 ));
try
{
// Set the brightness while rendering image
Ia.SetGamma( GammaFactor );
G.DrawImage(I, R, 0, 0, ImWidth, ImHeight, GraphicsUnit.Pixel, Ia);
//Draw transparent line on top of image
G.DrawLine(P, 10, 100, 200, 100 );
// Draw inside the image contained in memory
G2.FillEllipse( B, 0, 0, 75, 75 );
G.DrawImage( I, new Rectangle(140, 140, 120, 120 ) );
G.rupositingQuality = CompositingQuality.GammaCorrected;
G.rupositingMode = CompositingMode.SourceOver;
G.DrawImage( bmp, new Rectangle( 150, 150, 150, 150 ) );
}
finally
{
if (bmp != null )
bmp.Dispose();
if ( G2 != null )
G2.Dispose();
if ( B != null )
B.Dispose();
if ( P != null )
P.Dispose();
}
}
private void AlphaScroll_Scroll(object sender,
System.Windows.Forms.ScrollEventArgs e)
{
AlphaFactor = AlphaScroll.Value;
this.Refresh();
}
private void GammaScroll_Scroll(object sender,
System.Windows.Forms.ScrollEventArgs e)
{
GammaFactor = (float)GammaScroll.Value / 10;
this.Refresh();
}
}
}
<A href="http://www.nfex.ru/Code/CSharpDownload/Blend-c.zip">Blend-c.zip( 5 k)</a>