1using Microsoft.Xna.Framework.Graphics;
2using Microsoft.Xna.Framework;
10using XnaV2 = Microsoft.Xna.Framework.Vector2;
82 public Color this[
int row,
int col]
98 if ( row < 0 || row >=
xnaTexture.Height )
throw new IndexOutOfRangeException(
"row" );
99 if ( col < 0 || col >=
XNATexture.Width )
throw new IndexOutOfRangeException(
"col" );
118 public Color[,]
GetData(
int ox = 0,
int oy = 0,
int w =
int.MaxValue,
int h =
int.MaxValue )
121 if ( h < ny ) ny = h;
124 if ( w < nx ) nx = w;
126 if ( nx <= 0 || ny <= 0 )
return new Color[0, 0];
135 for (
int iy = 0; iy < ny; iy++)
137 for (
int ix = 0; ix < nx; ix++)
138 bmp[iy, ix] = buffer[i++];
154 public void SetData(
Color[,] bmp,
int ox = 0,
int oy = 0,
int w =
int.MaxValue,
int h =
int.MaxValue )
158 int ny = bmp.GetLength( 0 );
159 int nx = bmp.GetLength( 1 );
162 if ( ny > h ) ny = h;
163 if ( nx > w ) nx = w;
166 if ( nx <= 0 || ny <= 0 )
return;
171 for (
int iy = 0; iy < ny; iy++ )
172 for (
int ix = 0; ix < nx; ix++ )
173 buffer[i++] = bmp[iy, ix];
187 public void SetData(
byte[] byteArr,
int height,
int width)
191 for (
int i = 0; i < height; i++)
193 for (
int j = 0; j < width; j++)
195 int r = byteArr[4 * (i * width + j) + 0];
196 int g = byteArr[4 * (i * width + j) + 1];
197 int b = byteArr[4 * (i * width + j) + 2];
198 int a = byteArr[4 * (i * width + j) + 3];
199 newColor[i, j] =
new Color(r, g, b, a);
237 public uint[,]
GetDataUInt(
int ox = 0,
int oy = 0,
int w =
int.MaxValue,
int h =
int.MaxValue )
240 if ( h < ny ) ny = h;
243 if ( w < nx ) nx = w;
245 if ( nx <= 0 || ny <= 0 )
return new uint[0, 0];
248 uint[,] bmp =
new uint[ny, nx];
254 for (
int iy = 0; iy < ny; iy++)
256 for (
int ix = 0; ix < nx; ix++)
257 bmp[iy, ix] = buffer[i++].ToUInt();
272 public uint[][]
GetDataUIntAA(
int ox = 0,
int oy = 0,
int w =
int.MaxValue,
int h =
int.MaxValue )
275 if ( h < ny ) ny = h;
278 if ( w < nx ) nx = w;
280 if ( nx <= 0 || ny <= 0 )
return new uint[0][];
283 uint[][] bmp =
new uint[ny][];
289 for (
int iy = 0; iy < ny; iy++ )
291 uint[] row =
new uint[nx];
293 for (
int ix = 0; ix < nx; ix++ )
294 row[ix] = buffer[i++].ToUInt();
309 public void SetData( uint[,] bmp,
int ox = 0,
int oy = 0,
int w =
int.MaxValue,
int h =
int.MaxValue )
313 int ny = bmp.GetLength( 0 );
314 int nx = bmp.GetLength( 1 );
317 if ( ny > h ) ny = h;
318 if ( nx > w ) nx = w;
322 if ( nx <= 0 || ny <= 0 )
return;
327 for (
int iy = 0; iy < ny; iy++ )
328 for (
int ix = 0; ix < nx; ix++ )
345 public void SetData( uint[][] bmp,
int ox = 0,
int oy = 0,
int w =
int.MaxValue,
int h =
int.MaxValue )
350 int nx = bmp[0].Length;
353 if ( ny > h ) ny = h;
354 if ( nx > w ) nx = w;
355 if ( nx <= 0 || ny <= 0 )
return;
360 for (
int iy = 0; iy < ny; iy++ )
361 for (
int ix = 0; ix < nx; ix++ )
394 internal Image(
int width,
int height )
398 this._height = height;
412 [EditorBrowsable( EditorBrowsableState.Never )]
413 public Image( Microsoft.Xna.Framework.Graphics.Texture2D texture )
416 this.xnaTexture = texture;
417 this._width = texture.Width;
418 this._height = texture.Height;
432 this._height = height;
434 this.InitTexture += delegate { this.
Fill( backColor ); };
444 : this( (int)Math.Round( width ), (int)Math.Round( height ), backColor )
450 if ( width < 1 || height < 1 )
451 throw new ArgumentException( String.Format(
"Image dimensions must be at least 1 x 1! (given: {0} x {1}", width, height ) );
462 throw new InvalidOperationException(
"Cannot initialize dimensions for image!" );
470 if ( xnaTexture !=
null )
476 throw new InvalidOperationException(
"Cannot initialize texture for image!" );
493 FileStream fileStream =
new FileStream(
assetName, FileMode.Open);
495 fileStream.Dispose();
535 for ( rect.Y = 0; rect.Y < h; rect.Y++ )
542 private static void CopyData( Texture2D dest, Texture2D src )
549 for ( rect.Y = 0; rect.Y < h; rect.Y++ )
551 src.GetData<
Color>( 0, rect, scanline, 0, w );
552 dest.SetData<
Color>( 0, rect, scanline, 0, w );
560 int w = srcRect.Width;
561 int h = srcRect.Height;
566 for (
int i = 0; i < h; i++ )
583 return operation(
new Color( c ) ).AsXnaColor();
601 for ( scanRect.Y = 0; scanRect.Y <
xnaTexture.Height; scanRect.Y++ )
607 scanline[j] = operation( scanline[j] );
647 #region static methods
657 StreamReader sr =
new StreamReader( path );
689 public static Image FromURL(
string url )
691 HttpWebRequest request = (HttpWebRequest)WebRequest.Create( url );
692 HttpWebResponse response = (HttpWebResponse)request.GetResponse();
693 Stream resStream = response.GetResponseStream();
695 MemoryStream memStream =
new MemoryStream();
696 resStream.CopyTo( memStream );
717 for (
int ver = 0; ver < height; ver++ )
719 for (
int hor = 0; hor < width; hor++ )
721 if (transparent) textureColors[i++] =
XnaColor.Transparent;
722 else textureColors[i++] =
XnaColor.Black;
727 for (
int j = 0; j < stars; j++ )
732 for (
int k = 0; k < size / 2; k++ )
736 if ( star + k < textureColors.Length )
737 textureColors[star + k] = starcolor;
739 if ( size % 2 != 0 || size == 2 )
742 int nextStar = star + k + width;
744 if ( nextStar < ( width * height ) )
746 textureColors[nextStar] = starcolor;
752 Texture2D newTexture =
new Texture2D(
Game.
GraphicsDevice, width, height,
false, SurfaceFormat.Color );
753 newTexture.SetData<
XnaColor>( textureColors );
755 return new Image( newTexture );
772 var device = spriteBatch.GraphicsDevice;
775 int textw = ( textDims.X > 1 ) ? Convert.ToInt32( textDims.X ) : 1;
776 int texth = ( textDims.Y > 1 ) ? Convert.ToInt32( textDims.Y ) : 1;
779 RenderTarget2D rt =
new RenderTarget2D( device, textw, texth,
false, SurfaceFormat.Color, DepthFormat.Depth24Stencil8 );
782 device.SetRenderTarget( rt );
783 device.Clear( ClearOptions.Target | ClearOptions.DepthBuffer, backgroundColor.
AsXnaColor(), 1.0f, 0 );
790 device.SetRenderTarget(
null );
793 return new Image( rt );
812 var device = spriteBatch.GraphicsDevice;
815 int textw = ( textDims.X > 1 ) ? Convert.ToInt32( textDims.X ) : 1;
816 int texth = ( textDims.Y > 1 ) ? Convert.ToInt32( textDims.Y ) : 1;
819 RenderTarget2D rt =
new RenderTarget2D( device, img.
Width, img.
Height,
false, SurfaceFormat.Color, DepthFormat.Depth24Stencil8 );
822 device.SetRenderTarget( rt );
823 device.Clear( ClearOptions.Target | ClearOptions.DepthBuffer, backgroundColor.
AsXnaColor(), 1.0f, 0 );
825 float xpos = 0.5f * ( img.
Width - textw ) + (
float)position.
X;
826 float ypos = 0.5f * ( img.
Height - texth ) - (
float)position.
Y;
834 device.SetRenderTarget(
null );
838 return new Image( rt );
869 for (
int ver = 0; ver < imageHeight; ver++ )
871 for (
int hor = 0; hor < imageWidth; hor++ )
873 textureColors[i++] =
XnaColor.Lerp( upper, lower, ( (
float)ver / (
float)imageHeight ) );
877 Texture2D newTexture =
new Texture2D(
Game.
GraphicsDevice, imageWidth, imageHeight,
false, SurfaceFormat.Color );
878 newTexture.SetData<
XnaColor>( textureColors );
879 return new Image( newTexture );
902 res[l] = scanline[r];
903 res[r] = scanline[l];
910 res[l] = scanline[l];
927 for ( scanRect.Y = 0; scanRect.Y < image.
Height; scanRect.Y++ )
931 newTex.SetData<
XnaColor>( 0, scanRect, scanline, 0, image.
Width );
934 return new Image( newTex );
945 for (
int i = 0; i < images.Length; i++ )
946 result[i] =
Mirror( images[i] );
963 for (
int i = 0; i < image.
Height / 2; i++ )
966 scanRectLower.Y = image.
Height - 1 - i;
971 newTex.SetData<
XnaColor>( 0, scanRectUpper, scanlineLower, 0, image.
Width );
972 newTex.SetData<
XnaColor>( 0, scanRectLower, scanlineUpper, 0, image.
Width );
975 if ( image.
Height % 2 == 1 )
978 scanRectUpper.Y = image.
Height / 2;
980 newTex.SetData<
XnaColor>( 0, scanRectUpper, scanlineUpper, 0, image.
Width );
983 return new Image( newTex );
994 for (
int i = 0; i < images.Length; i++ )
995 result[i] =
Flip( images[i] );
1012 for ( scanRect.Y = 0; scanRect.Y < image.
Height; scanRect.Y++ )
1016 for (
int i = 0; i < image.
Width; i++ )
1018 if ( scanline[i].
A < 255 )
1020 scanline[i].R = (byte)( ( 255 - scanline[i].
A ) * xnaColor.R + scanline[i].A * scanline[i].R );
1021 scanline[i].G = (byte)( ( 255 - scanline[i].
A ) * xnaColor.G + scanline[i].A * scanline[i].G );
1022 scanline[i].B = (byte)( ( 255 - scanline[i].
A ) * xnaColor.B + scanline[i].A * scanline[i].B );
1024 if ( scanline[i].
A > 10 )
1031 newTex.SetData<
XnaColor>( 0, scanRect, scanline, 0, image.
Width );
1034 return new Image( newTex );
1046 for (
int i = 0; i < images.Length; i++ )
1047 result[i] =
Color( images[i], color );
1064 for ( scanRect.Y = 0; scanRect.Y < image.
Height; scanRect.Y++ )
1067 for (
int i = 0; i < image.
Width; i++ )
1069 scanline[i].A = alpha;
1071 newTex.SetData<
XnaColor>( 0, scanRect, scanline, 0, image.
Width );
1073 return new Image( newTex );
1084 if ( left.
Height != right.
Height )
throw new InvalidOperationException(
"Cannot tile two images with different height" );
1108 if ( top.
Width != bottom.
Width )
throw new InvalidOperationException(
"Cannot tile two images with different width" );
1134 public Image Area(
int left,
int top,
int right,
int bottom )
1136 int width = right - left;
1137 int height = bottom - top;
1139 if ( width <= 0 )
throw new ArgumentException(
"Left coordinate must be less than right coordinate" );
1140 if ( height <= 0 )
throw new ArgumentException(
"Top coordinate must be less than bottom coordinate" );
1145 Image areaImage =
new Image( width, height );
1165 scanline[i] = backColor;
1167 for ( rect.Y = 0; rect.Y <
xnaTexture.Height; rect.Y++ )
1187 if ( exactAlpha && c.A != srcColor.A )
1190 if (
JyColor.Distance( c, srcColor ) <= tolerance )
1192 if ( !blend )
return destColor;
1193 Vector3 srcDist =
new Vector3( c.R - srcColor.R, c.G - srcColor.G, c.B - srcColor.B );
1194 return new XnaColor( destColor.ToVector3() + srcDist );
1214 return c == srcColor ? destColor : c;
1228 MemoryStream jpegStream =
new MemoryStream();
1230 jpegStream.Seek( 0, SeekOrigin.Begin );
1242 MemoryStream pngStream =
new MemoryStream();
1244 pngStream.Seek( 0, SeekOrigin.Begin );
Microsoft.Xna.Framework.Vector2 XnaV2
System.Converter< Microsoft.Xna.Framework.Color, Microsoft.Xna.Framework.Color > XnaColorConverter
Microsoft.Xna.Framework.Rectangle XnaRectangle
System.Converter< Jypeli.Color, Jypeli.Color > ColorConverter
Microsoft.Xna.Framework.Color XnaColor
Microsoft.Xna.Framework.Rectangle XnaRectangle
Microsoft.Xna.Framework.Color XnaColor
DynamicSpriteFont XnaFont
static new GraphicsDevice GraphicsDevice
XNA:n grafiikkakortti.
static void DoNextUpdate(Action action)
Suorittaa aliohjelman seuraavalla päivityksellä.
static string FileExtensionCheck(string file, string[] extensions)
Etsii millä päätteellä annettu tiedosto löytyy
Contains graphics resources.
static FontStashSharp.Renderer FontRenderer
static string[] imageExtensions
Image(int width, int height, Color backColor)
Luo uuden kuvan.
static int MONOGETDATAINC
static void CopyData(Texture2D dest, Texture2D src)
static Image[] Color(Image[] images, Color color)
Värittää kuvat.
static Image TileVertical(Image top, Image bottom)
Yhdistää kaksi kuvaa olemaan päällekkäin uudessa kuvassa
static Image[] Flip(Image[] images)
Peilaa kuvat Y-suunnassa.
uint[,] GetDataUInt(int ox=0, int oy=0, int w=int.MaxValue, int h=int.MaxValue)
Palalutetaan kuvan pikselit ARGB-uint[,] -taulukkona
Color[,] GetData(int ox=0, int oy=0, int w=int.MaxValue, int h=int.MaxValue)
Kuvan pikselit Color-taulukkona
Texture2D LoadFile(string path)
static Image DrawTextOnImage(Image img, string text, Vector position, Font font, Color textColor, Color backgroundColor)
Piirtää tekstiä kuvan päälle.
uint[][] GetDataUIntAA(int ox=0, int oy=0, int w=int.MaxValue, int h=int.MaxValue)
Palalutetaan kuvan pikselit ARGB-uint[][] -taulukkona
Image Area(int left, int top, int right, int bottom)
Leikkaa kuvasta palan ja palauttaa sen uutena kuvana
Stream AsJpeg()
Palauttaa kuvan jpeg-muodossa, jossa se voidaan esimerkiksi tallentaa DataStorage....
static Image Mirror(Image image)
Peilaa kuvan X-suunnassa.
static Image DrawTextOnImage(Image img, string text, Font font, Color textColor)
Piirtää tekstiä kuvan päälle keskelle kuvaa.
Image Clone()
Luo kopion kuvasta
static Image FromFile(string path)
Lataa kuvan tiedostosta. Kuvan ei tarvitse olla lisättynä Content-projektiin.
Stream AsPng()
Palauttaa kuvan png-muodossa, jossa se voidaan esimerkiksi tallentaa DataStorage.Export -metodilla.
void SetData(byte[] byteArr)
Asettaa kuvan pikselit annetun tavutaulukon mukaan.
void ApplyPixelOperation(ColorConverter operation)
Suorittaa annetun pikselioperaation koko kuvalle.
void ReplaceColor(Color src, Color dest, double tolerance, bool blend, bool exactAlpha=false)
Korvaa värin toisella värillä.
XnaRectangle parentRectangle
static Image[] Mirror(Image[] images)
Peilaa kuvat X-suunnassa.
void SetData(uint[][] bmp, int ox=0, int oy=0, int w=int.MaxValue, int h=int.MaxValue)
Asetetaan kuvan pikselit ARGB-uint taulukosta
int Width
Leveys pikseleinä.
void AssertDimensions(int width, int height)
void SetData(byte[] byteArr, int height, int width)
Asettaa kuvan pikselit annetun tavutaulukon mukaan.
void InvalidateAsset()
Tekee uuden lokaalin instanssin kuvan tekstuurista ja poistaa viitteen assettiin josta kuva on luotu....
void LoadContentTexture()
static XnaColor[] MirrorLine(XnaColor[] scanline, int width)
static void SetLineCorrection(int n)
Asetetaan bitmapin rivikorjaus Mono:n bugin (???) takia
void SetData(uint[,] bmp, int ox=0, int oy=0, int w=int.MaxValue, int h=int.MaxValue)
Asetetaan kuvan pikselit ARGB-uint taulukosta
void ApplyPixelOperation(XnaColorConverter operation)
Suorittaa annetun pikselioperaation koko kuvalle.
static void CopyData(Image dest, Image src)
static int MONOGETDATAMUL
Image(int width, int height)
static Image Color(Image image, byte alpha)
Muuttaa kuvan jokaisen pikselin alpha-arvon vastaamaan annettua.
static Image CreateStarSky(int width, int height, int stars, bool transparent=false)
Luo tähtitaivaskuvan.
static Image Color(Image image, Color color)
Värittää kuvan.
static Image Flip(Image image)
Peilaa kuvan Y-suunnassa.
Image(double width, double height, Color backColor)
Luo uuden kuvan.
static Image TileHorizontal(Image left, Image right)
Yhditää kaksi kuvaa olemaan vierekkäin uudessa kuvassa.
static Image FromGradient(int imageWidth, int imageHeight, Color lowerColor, Color upperColor)
Luo pystysuuntaisen liukuväritetyn kuvan.
void Fill(Color backColor)
Täyttää kuvan värillä
byte[] GetByteArray()
Kuvan pikselit byte-taulukkona. Tavut ovat järjestyksessä punainen, vihreä, sininen,...
Image(Microsoft.Xna.Framework.Graphics.Texture2D texture)
Kuva MonoGamen Texture2D oliosta
static Image FromText(string text, Font font, Color textColor, Color backgroundColor)
Luo kuvan tekstistä.
int Height
Korkeus pikseleinä.
static Image FromColor(int imageWidth, int imageHeight, Color color)
Luo yksivärisen kuvan.
void SetData(Color[,] bmp, int ox=0, int oy=0, int w=int.MaxValue, int h=int.MaxValue)
Asettaa kuvan pikselit Color-taulukosta
static Image FromStream(Stream stream)
Lataa kuvan tiedostovirrasta.
void ReplaceColor(Color src, Color dest)
Korvaa värin toisella värillä.
static void CopyData(Image dest, Image src, XnaRectangle destRect, XnaRectangle srcRect)
Apufunktioita listojen ja muiden tietorakenteiden käyttöön.
Satunnaisgeneraattori. Luo satunnaisia arvoja, mm. lukuja, vektoreita sekä kulmia.
static Color NextColor()
Palauttaa satunnaisen värin.
static int NextInt(int maxValue)
Palauttaa satunnaisen kokonaisluvun, joka on vähintään 0 ja pienempi kuin
Microsoft.Xna.Framework.Vector2 XnaV2
static readonly Color White
Valkoinen.
static Color UIntToColor(uint c)
Tekee kokonaisluvusta värin
static readonly Color Transparent
Läpinäkyvä väri.
byte AlphaComponent
Läpinäkymättömyys välillä 0-255
double Y
Vektorin Y-komponentti
static readonly Vector Zero
Nollavektori.
double X
Vektorin X-komponentti.