コード例 #1
0
        /// <summary>
        /// Set a graphic tile.
        /// </summary>
        /// <param name="tileNum">Tile number to set.</param>
        /// <param name="mode">Palette mode.</param>
        /// <param name="pal">Palette.</param>
        /// <param name="paletteNum">Palette number.</param>
        /// <param name="data">Bitmap data.</param>
        /// <param name="dataXPos">Bitmap data X position.</param>
        /// <param name="dataYPos">Bitmap data Y position.</param>
        public void SetTile(int tileNum, PaletteMode mode, NCL pal, int paletteNum, Bitmap data, int dataXPos, int dataYPos)
        {
            List <byte> newTileData = GenTile(mode, pal, paletteNum, data, ref dataXPos, ref dataYPos);
            int         dataOff     = tileNum * 64;

            if (mode == PaletteMode.Bpp4)
            {
                dataOff = tileNum * 32;
            }
            for (int i = 0; i < newTileData.Count; i++)
            {
                Data[dataOff + i] = newTileData[i];
            }
        }
コード例 #2
0
        /// <summary>
        /// Generate a tile.
        /// </summary>
        /// <param name="mode">Palette mode.</param>
        /// <param name="pal">Palette.</param>
        /// <param name="paletteNum">Palette number.</param>
        /// <param name="data">Bitmap data.</param>
        /// <param name="xPtr">X position in bitmap.</param>
        /// <param name="yPtr">Y position in bitmap.</param>
        /// <returns>Generated tile.</returns>
        private List <byte> GenTile(PaletteMode mode, NCL pal, int paletteNum, Bitmap data, ref int xPtr, ref int yPtr)
        {
            List <byte> ret           = new List <byte>();
            bool        isFirstNybble = true;
            int         numPixelsDone = 0;
            int         scanX         = 0;
            int         scanY         = 0;

            while (numPixelsDone < 64)
            {
                if (mode == PaletteMode.Bpp4)
                {
                    if (isFirstNybble)
                    {
                        ret.Add((byte)(pal.GetClosestColor(data.GetPixel(xPtr + scanX, yPtr + scanY), paletteNum, mode) << 4));
                    }
                    else
                    {
                        ret[ret.Count - 1] |= (byte)pal.GetClosestColor(data.GetPixel(xPtr + scanX, yPtr + scanY), paletteNum, mode);
                        numPixelsDone++;
                        scanX++;
                    }
                    isFirstNybble = !isFirstNybble;
                }
                else
                {
                    ret.Add((byte)pal.GetClosestColor(data.GetPixel(xPtr + scanX, yPtr + scanY), paletteNum, mode));
                    numPixelsDone++;
                    scanX++;
                }
                if (scanX == 8)
                {
                    scanX = 0;
                    scanY++;
                }
            }
            xPtr += 8;
            yPtr += 8;
            return(ret);
        }