Pix15
Inheritance: Pix
Example #1
0
 /// <summary>
 /// Gets the size of.
 /// </summary>
 /// <returns>size of this structure</returns>
 public int GetSizeOf()
 {
     if (bitmapPixelDataPix15 != null)
     {
         return(bitmapPixelDataPix15.Length * Pix15.GetSizeOf());
     }
     else if (bitmapPixelDataPix24 != null)
     {
         return(bitmapPixelDataPix24.Length * Pix24.GetSizeOf());
     }
     return(0);
 }
        /// <summary>
        /// see <see cref="SwfDotNet.IO.Tags.BaseTag">base class</see>
        /// </summary>
        public override void ReadData(byte version, BufferedBinaryReader binaryReader)
        {
            RecordHeader rh = new RecordHeader();
            rh.ReadData(binaryReader);

            int beforePos = (int)binaryReader.BaseStream.Position;
            int toReaded = (int)rh.TagLength - 7;

            _characterId = binaryReader.ReadUInt16();
            _bitmapFormat = binaryReader.ReadByte();
            _bitmapWidth = binaryReader.ReadUInt16();
            _bitmapHeight = binaryReader.ReadUInt16();
            _bitmapColorTableSize = 0;

            if (_bitmapFormat == 3)
            {
                _bitmapColorTableSize = binaryReader.ReadByte();
                toReaded--;
            }

            if (_bitmapFormat == 3)
            {
                _colorMapData = new ColorMapData();
                _colorMapData.ReadData(binaryReader, _bitmapColorTableSize, _bitmapWidth, _bitmapHeight, toReaded);
            }
            else if (_bitmapFormat == 4 || _bitmapFormat == 5)
            {
                int imageSize = _bitmapWidth * _bitmapHeight;
                int uncompressedSize = imageSize;
                if (_bitmapFormat == 4)
                    uncompressedSize *= 2;
                else
                    uncompressedSize *= 4;

                byte[] uncompressed = new byte[uncompressedSize];
                byte[] compressed = binaryReader.ReadBytes(toReaded);
                Inflater zipInflator = 	new Inflater();
                zipInflator.SetInput(compressed);
                zipInflator.Inflate(uncompressed, 0, uncompressedSize);

                _bitmapColorData = null;
                if (_bitmapFormat == 4)
                {
                    Pix15[] bitmapPixelData = new Pix15[imageSize];
                    for (int i = 0, j = 0; i < imageSize; i++, j += 2)
                    {
                        byte[] data = new byte[2] {uncompressed[j], uncompressed[j+1]};
                        bitmapPixelData[i] = new Pix15(data);
                    }
                    _bitmapColorData = new BitmapColorData(bitmapPixelData);
                }
                else
                {
                    Pix24[] bitmapPixelData = new Pix24[imageSize];
                    for (int i = 0, j = 0; i < imageSize; i++, j += 4)
                    {
                        byte reserved = uncompressed[j];
                        byte red = uncompressed[j + 1];
                        byte green = uncompressed[j + 2];
                        byte blue = uncompressed[j + 3];
                        bitmapPixelData[i] = new Pix24(red, green, blue);
                    }
                    _bitmapColorData = new BitmapColorData(bitmapPixelData);
                }
            }
        }
        /// <summary>
        /// Construct a new DefineBitsLossLessTag object 
        /// from an image object.
        /// </summary>
        /// <param name="characterId">Character id.</param>
        /// <param name="image">Image.</param>
        /// <returns></returns>
        public static DefineBitsLossLessTag FromImage(ushort characterId, Image image)
        {
            if (image.RawFormat.Equals(ImageFormat.Bmp) == false &&
                image.RawFormat.Equals(ImageFormat.MemoryBmp) == false)
                throw new InvalidImageFormatException();

            Bitmap bitmap = (Bitmap)image;
            byte format = 0;
            PixelFormat pxFormat = bitmap.PixelFormat;
            if (pxFormat.Equals(PixelFormat.Format8bppIndexed))
                format = 3;
            else if (pxFormat.Equals(PixelFormat.Format16bppRgb555) ||
                pxFormat.Equals(PixelFormat.Format16bppRgb565))
                format = 4;
            else if (pxFormat.Equals(PixelFormat.Format24bppRgb))
                format = 5;
            else
                throw new InvalidPixelFormatException();

            DefineBitsLossLessTag bmp = new DefineBitsLossLessTag();
            bmp.CharacterId = characterId;
            bmp.BitmapFormat = format;
            bmp.BitmapWidth = (ushort)bitmap.Width;
            bmp.BitmapHeight = (ushort)bitmap.Height;

            int imageSize = bitmap.Width * bitmap.Height;

            if (bmp.BitmapFormat == 3)
            {
                //TODO
            }
            else if (bmp.BitmapFormat == 4)
            {
                Pix15[] bitmapPixelData = new Pix15[imageSize];
                int k = 0;
                for (int i = 0; i < bitmap.Height; i++)
                {
                    for (int j = 0; j < bitmap.Width; j++)
                    {
                        Color color = bitmap.GetPixel(j, i);
                        bitmapPixelData[k] = new Pix15((byte)color.R, (byte)color.G, (byte)color.B);
                        k++;
                    }
                }
                bmp.BitmapData = new BitmapColorData(bitmapPixelData);
            }
            else if	(bmp.BitmapFormat == 5)
            {
                Pix24[] bitmapPixelData = new Pix24[imageSize];
                int k = 0;
                for (int i = 0; i < bitmap.Height; i++)
                {
                    for (int j = 0; j < bitmap.Width; j++)
                    {
                        Color color = bitmap.GetPixel(j, i);
                        bitmapPixelData[k] = new Pix24((byte)color.R, (byte)color.G, (byte)color.B);
                        k++;
                    }
                }
                bmp.BitmapData = new BitmapColorData(bitmapPixelData);
            }

            return bmp;
        }
Example #4
0
 /// <summary>
 /// Creates a new <see cref="BitmapColorData"/> instance.
 /// </summary>
 /// <param name="bitmapPixelData">Bitmap pixel data.</param>
 public BitmapColorData(Pix15[] bitmapPixelData)
 {
     this.bitmapPixelDataPix15 = bitmapPixelData;
 }