#region Using Statements using ANX.Framework.Graphics; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; #endregion // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. // For details see: http://anxframework.codeplex.com/license namespace ANX.Framework.Content.Pipeline.Graphics { public class PixelBitmapContent : BitmapContent where T : struct, IEquatable { private T[,] pixels; protected PixelBitmapContent() { } public PixelBitmapContent(int width, int height) : base(width, height) { pixels = new T[width, height]; } public T GetPixel(int x, int y) { return pixels[x, y]; } public override byte[] GetPixelData() { int rowSize = Marshal.SizeOf(typeof(T)) * base.Width; byte[] array = new byte[rowSize * base.Height]; for (int i = 0; i < base.Height; i++) { T[] row = GetRow(i); } return array; } public T[] GetRow(int y) { T[] row = new T[Width]; for (int col = 0; col < Width; col++) { row[col] = pixels[col, y]; } return row; } public void SetPixel(int x, int y, T value) { pixels[x, y] = value; } public override void SetPixelData(byte[] sourceData) { throw new NotImplementedException(); } public override string ToString() { throw new NotImplementedException(); } protected override bool TryCopyFrom(BitmapContent sourceBitmap, Rectangle sourceRegion, Rectangle destinationRegion) { throw new NotImplementedException(); } protected override bool TryCopyTo(BitmapContent destinationBitmap, Rectangle sourceRegion, Rectangle destinationRegion) { throw new NotImplementedException(); } public override bool TryGetFormat(out SurfaceFormat format) { string type = typeof(T).Name.ToLowerInvariant(); switch (type) { case "float": format = SurfaceFormat.Single; return true; case "vector2": format = SurfaceFormat.Single; return true; case "vector4": format = SurfaceFormat.Vector4; return true; case "halfsingle": format = SurfaceFormat.HalfVector2; return true; case "halfvector2": format = SurfaceFormat.HalfVector2; return true; case "halfvector4": format = SurfaceFormat.HalfVector4; return true; case "bgra5551": format = SurfaceFormat.Bgra5551; return true; case "bgr565": format = SurfaceFormat.Bgr565; return true; case "bgra4444": format = SurfaceFormat.Bgra4444; return true; case "color": format = SurfaceFormat.Color; return true; case "rg32": format = SurfaceFormat.Rg32; return true; case "rgba64": format = SurfaceFormat.Rgba64; return true; case "rgba1010102": format = SurfaceFormat.Rgba1010102; return true; case "alpha8": format = SurfaceFormat.Alpha8; return true; case "normalizedbyte2": format = SurfaceFormat.NormalizedByte2; return true; case "normalizedbyte4": format = SurfaceFormat.NormalizedByte4; return true; default: format = Framework.Graphics.SurfaceFormat.Color; return false; } } } }