예제 #1
0
        public Bitmap GetBitmap()
        {
            List <byte[]> data = Compressed.GetDecompressedData();
            PixelFormat   currentPF;

            if (Header.Glyphs.BitsPerPixel == 4)
            {
                currentPF = PixelFormats.Indexed4Reverse;
                //Tool.ArrayTool.ReverseByteInList(data);
            }
            else if (Header.Glyphs.BitsPerPixel == 8)
            {
                currentPF = PixelFormats.Indexed8;
            }
            else
            {
                return(null);
            }

            int width  = Header.Glyphs.Size1 * 16;
            int height = Header.Glyphs.Size2 * (int)Math.Ceiling(data.Count / 16d);

            int stride    = ImageHelper.GetStride(currentPF, Header.Glyphs.Size1);
            int stridenew = ImageHelper.GetStride(currentPF, width);

            byte[] newData = new byte[ImageHelper.GetStride(currentPF, width) * height];

            for (int i = 0, offset = 0; i < data.Count; i++)
            {
                byte[] current = data[i];
                for (int y = 0; y < Header.Glyphs.Size2; y++)
                {
                    for (int x = 0; x < stride; x++)
                    {
                        newData[offset + y * stridenew + x] = current[y * stride + x];
                    }
                }

                if ((i + 1) % 16 == 0)
                {
                    offset += stridenew * (Header.Glyphs.Size2 - 1) + stride;
                }
                else
                {
                    offset += stride;
                }
            }

            return(new Bitmap(width, height, currentPF, newData, Palette.GetImagePalette()));
        }
예제 #2
0
        private BitmapSource GetFontImage()
        {
            List <byte[]> data = Compressed.GetDecompressedData();

            PixelFormat currentPF;

            if (Header.Glyphs.BitsPerPixel == 4)
            {
                currentPF = PixelFormats.Indexed4;
                Util.ReverseByteInList(data);
            }
            else if (Header.Glyphs.BitsPerPixel == 8)
            {
                currentPF = PixelFormats.Indexed8;
            }
            else
            {
                return(null);
            }

            ImageData BMP  = new ImageData();
            ImageData Line = new ImageData();

            int glyphindex = 0;

            foreach (var a in data)
            {
                Line = ImageData.MergeLeftRight(Line, new ImageData(a, currentPF, Header.Glyphs.Size1, Header.Glyphs.Size2), 1);
                glyphindex++;
                if (glyphindex % 16 == 0)
                {
                    BMP  = ImageData.MergeUpDown(BMP, Line, 0);
                    Line = new ImageData();
                }
            }
            BMP = ImageData.MergeUpDown(BMP, Line, 0);

            return(BitmapSource.Create(BMP.PixelWidth, BMP.PixelHeight, 96, 96, BMP.PixelFormat, Palette.Pallete, BMP.Data, BMP.Stride));
        }