148 lines
4.7 KiB
C#
148 lines
4.7 KiB
C#
#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<T> : BitmapContent where T : struct, IEquatable<T>
|
|
{
|
|
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);
|
|
|
|
BitCopier.Copy<T, byte>(this.GetRow(i), 0, PixelBitmapContent<T>.pixelSize, array, i * num, PixelBitmapContent<T>.pixelSize, PixelBitmapContent<T>.pixelSize, base.Width);
|
|
}
|
|
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;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|