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())); }
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)); }