topical media & game development
game-xna-intro-XnaGraphicEngineChapter5-Helpers-ColorHelper.cs / cs
// Project: XnaGraphicEngine, File: ColorHelper.cs
// Namespace: XnaGraphicEngine.Helpers, Class: ColorHelper
// Path: C:\code\XnaGraphicEngine\Helpers, Author: Abi
// Code lines: 182, Size of file: 5,41 KB
// Creation date: 02.10.2006 01:33
// Last modified: 27.10.2006 02:40
// Generated with Commenter by abi.exDream.com
#region Using directives
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System;
using System.Collections.Generic;
using System.Text;
#endregion
namespace XnaGraphicEngine.Helpers
{
<summary>
Color helper, just to convert colors to different formats and providing
more helper methods missing in the
Color class.
</summary>
public class ColorHelper
{
#region Constants
<summary>
Empty color, used to mark unused color values.
</summary>
public static readonly
Color Empty = new
Color(0, 0, 0, 0);
<summary>
Half alpha color helper. Just white with 50% alpha.
</summary>
public static readonly
Color
HalfAlpha = new
Color(255, 255, 255, 128);
#endregion
#region Convert Color to Vector4
<summary>
Convert
Color to Vector4
</summary>
<param name="color">
Color</param>
<returns>Return Vector4
</returns>
public static Vector4 ConvertColorToVector4(
Color color)
{
return new Vector4(
color.R / 255.0f,
color.G / 255.0f,
color.B / 255.0f,
color.A / 255.0f);
} // ConvertColorToVector4(color)
#endregion
#region Stay in range helper
<summary>
Stay in range, val will be set to min if less or to max when bigger.
</summary>
private static float StayInRange(float val, float min, float max)
{
if (val < min)
return min;
if (val > max)
return max;
return val;
} // StayInRange(val, min, max)
#endregion
#region Multiply colors
<summary>
Multiply colors
</summary>
<param name="color1">
Color 1
</param>
<param name="color2">
Color 2
</param>
<returns>Return color
</returns>
public static
Color MultiplyColors(
Color color1,
Color color2)
{
// Quick check if any of the colors is white,
// multiplying won't do anything then.
if (color1 ==
Color.White)
return color2;
if (color2 ==
Color.White)
return color1;
// Get values from color1
float redValue1 = color1.R / 255.0f;
float greenValue1 = color1.G / 255.0f;
float blueValue1 = color1.B / 255.0f;
float alphaValue1 = color1.A / 255.0f;
// Get values from color2
float redValue2 = color2.R / 255.0f;
float greenValue2 = color2.G / 255.0f;
float blueValue2 = color2.B / 255.0f;
float alphaValue2 = color2.A / 255.0f;
// Multiply everything using our floats
return new Color(
(byte)(StayInRange(redValue1 * redValue2, 0, 1) * 255.0f),
(byte)(StayInRange(greenValue1 * greenValue2, 0, 1) * 255.0f),
(byte)(StayInRange(blueValue1 * blueValue2, 0, 1) * 255.0f),
(byte)(StayInRange(alphaValue1 * alphaValue2, 0, 1) * 255.0f));
} // MultiplyColors(color1, color2)
#endregion
#region Same color check
<summary>
Same color. Helper method for LoadLevel because for some reason
the color compare does not work and causes a lot of errors.
</summary>
<param name="color">
Color</param>
<param name="checkColor">Check color
</param>
<returns>Bool
</returns>
public static bool SameColor(
Color color,
Color checkColor)
{
return color.R == checkColor.R &&
color.G == checkColor.G &&
color.B == checkColor.B;
} // SameColor(color, checkColor)
#endregion
#region Interpolate color
<summary>
Interpolate color. Used to fade the hud colors from green to red.
</summary>
public static
Color InterpolateColor(
Color col1,
Color col2, float percent)
{
return new
Color(
(byte)((float)col1.R * (1.0f - percent) + (float)col2.R * percent),
(byte)((float)col1.G * (1.0f - percent) + (float)col2.G * percent),
(byte)((float)col1.B * (1.0f - percent) + (float)col2.B * percent),
(byte)((float)col1.A * (1.0f - percent) + (float)col2.A * percent));
} // InterpolateColor(col1, col2, percent)
#endregion
#region ApplyAlphaToColor
<summary>
Apply alpha to color
</summary>
<param name="col">
Color</param>
<param name="newAlpha">New alpha
</param>
<returns>Color</returns>
public static
Color ApplyAlphaToColor(
Color col, float newAlpha)
{
if (newAlpha < 0)
newAlpha = 0;
if (newAlpha > 1)
newAlpha = 1;
return new
Color(
(byte)(col.R),
(byte)(col.G),
(byte)(col.B),
(byte)(newAlpha * 255.0f));
} // ApplyAlphaToColor(col, newAlpha)
<summary>
Mix alpha to color
</summary>
<param name="col">
Color</param>
<param name="newAlpha">New alpha
</param>
<returns>Color</returns>
public static
Color MixAlphaToColor(
Color col, float newAlpha)
{
if (newAlpha < 0)
newAlpha = 0;
if (newAlpha > 1)
newAlpha = 1;
return new
Color(
(byte)(col.R * newAlpha),
(byte)(col.G * newAlpha),
(byte)(col.B * newAlpha),
(byte)(newAlpha * 255.0f));
} // MixAlphaToColor(col, newAlpha)
#endregion
} // class ColorHelper
} // namespace XnaGraphicEngine.
Helpers
(C) Æliens
20/2/2008
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-2780434-1";
urchinTracker();
</script>