LynnaLab.Area.GetTileImage C# (CSharp) Method

GetTileImage() public method

public GetTileImage ( int index ) : Bitmap
index int
return System.Drawing.Bitmap
        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;
        }

Usage Example

示例#1
0
        public Bitmap GetImage()
        {
            if (cachedImage != null)
            {
                return(cachedImage);
            }

            cachedImage = new Bitmap(width * 16, height * 16);
            Graphics g = Graphics.FromImage(cachedImage);

            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    g.DrawImageUnscaled(area.GetTileImage(GetTile(x, y)), x * 16, y * 16);
                }
            }

            g.Dispose();

            return(cachedImage);
        }