public Bitmap GetTileImage(int index)
{
if (tileImagesCache[index] != null)
return tileImagesCache[index];
Bitmap image = new Bitmap(16,16);
Graphics g = Graphics.FromImage(image);
for (int y=0; y<2; y++) {
for (int x=0; x<2; x++) {
int tileIndex = GetSubTileIndex(index,x,y);
int flags = GetSubTileFlags(index,x,y);
int tileOffset = 0x1000 + ((sbyte)tileIndex)*16;
byte[] src = new byte[16];
Array.Copy(graphicsState.VramBuffer[1], tileOffset, src, 0, 16);
Bitmap subImage = GbGraphics.TileToImage(src, GraphicsState.GetBackgroundPalettes()[flags&7], flags);
g.DrawImageUnscaled(subImage, x*8, y*8);
}
}
g.Dispose();
// if (fullCachedImageData == null)
// fullCachedImageData = fullCachedImage.LockBits(
// new Rectangle(0, 0, fullCachedImage.Width, fullCachedImage.Height),
// ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
// GbGraphics.QuickDraw(fullCachedImageData, image, (index%16)*16, (index/16)*16);
g = Graphics.FromImage(fullCachedImage);
g.DrawImageUnscaled(image, (index%16)*16, (index/16)*16);
g.Dispose();
tileImagesCache[index] = image;
return image;
}