public Kh2MessageRenderer(
            ISpriteDrawing drawing,
            RenderingMessageContext context)
        {
            _drawing    = drawing;
            _msgContext = context;

            _fontSpacing     = context.FontSpacing;
            _iconSpacing     = context.IconSpacing;
            _imageFont       = context.Font;
            _imageFont2      = context.Font2;
            _imageIcon       = context.Icon;
            _charPerRow      = context.Font?.Size.Width / context.FontWidth ?? 1;
            _iconPerRow      = context.Icon?.Size.Width / IconWidth ?? 1;
            _tableHeight     = context.TableHeight;
            _charTableHeight = context.TableHeight / context.FontHeight * context.FontHeight;
            _encode          = context.Encoder;

            if (_imageFont != null)
            {
                InitializeSurface(ref _spriteFont, _imageFont);
            }
            if (_imageFont2 != null)
            {
                InitializeSurface(ref _spriteFont2, _imageFont2);
            }
            if (_imageIcon != null)
            {
                InitializeSurface(ref _spriteIcon, _imageIcon);
            }
        }
Exemple #2
0
        private static byte[] GetDataResource4bpp(IImageRead image)
        {
            var size     = image.Size;
            var data     = image.GetData();
            var clut     = image.GetClut();
            var dstData  = new byte[size.Width * size.Height * sizeof(uint)];
            var srcIndex = 0;
            var dstIndex = 0;

            for (var y = 0; y < size.Height; y++)
            {
                for (var i = 0; i < size.Width / 2; i++)
                {
                    var ch        = data[srcIndex++];
                    var palIndex1 = (ch >> 4);
                    var palIndex2 = (ch & 15);
                    dstData[dstIndex++] = clut[palIndex1 * 4 + 2];
                    dstData[dstIndex++] = clut[palIndex1 * 4 + 1];
                    dstData[dstIndex++] = clut[palIndex1 * 4 + 0];
                    dstData[dstIndex++] = clut[palIndex1 * 4 + 3];
                    dstData[dstIndex++] = clut[palIndex2 * 4 + 2];
                    dstData[dstIndex++] = clut[palIndex2 * 4 + 1];
                    dstData[dstIndex++] = clut[palIndex2 * 4 + 0];
                    dstData[dstIndex++] = clut[palIndex2 * 4 + 3];
                }
            }

            return(dstData);
        }
Exemple #3
0
 public static void SaveImage(this IImageRead imageRead, string fileName)
 {
     using (var gdiBitmap = imageRead.CreateBitmap())
     {
         gdiBitmap.Save(fileName);
     }
 }
Exemple #4
0
        private static byte[] From4bpp(this IImageRead image, byte[] channelOrder)
        {
            var size     = image.Size;
            var data     = image.GetData();
            var clut     = image.GetClut();
            var dstData  = new byte[size.Width * size.Height * sizeof(uint)];
            var srcIndex = 0;
            var dstIndex = 0;

            for (var y = 0; y < size.Height; y++)
            {
                for (var i = 0; i < size.Width / 2; i++)
                {
                    var ch        = data[srcIndex++];
                    var palIndex1 = (ch & 15);
                    var palIndex2 = (ch >> 4);
                    dstData[dstIndex++] = clut[palIndex1 * 4 + channelOrder[0]];
                    dstData[dstIndex++] = clut[palIndex1 * 4 + channelOrder[1]];
                    dstData[dstIndex++] = clut[palIndex1 * 4 + channelOrder[2]];
                    dstData[dstIndex++] = clut[palIndex1 * 4 + channelOrder[3]];
                    dstData[dstIndex++] = clut[palIndex2 * 4 + channelOrder[0]];
                    dstData[dstIndex++] = clut[palIndex2 * 4 + channelOrder[1]];
                    dstData[dstIndex++] = clut[palIndex2 * 4 + channelOrder[2]];
                    dstData[dstIndex++] = clut[palIndex2 * 4 + channelOrder[3]];
                }
            }

            return(dstData);
        }
Exemple #5
0
 public static void Write(Stream stream, IImageRead image)
 {
     using (var bitmap = image.CreateBitmap())
     {
         stream.Position = 0;
         bitmap.Save(stream, ImageFormat.Tiff);
     }
 }
Exemple #6
0
        public static BitmapSource GetBimapSource(this IImageRead imageRead)
        {
            const double dpi = 96.0;

            var size = imageRead.Size;
            var data = imageRead.ToBgra32();

            return(BitmapSource.Create(size.Width, size.Height, dpi, dpi, PixelFormats.Bgra32, null, data, size.Width * 4));
        }
Exemple #7
0
        public static Texture2D CreateTexture(this IImageRead image, GraphicsDevice graphicsDevice)
        {
            var size    = image.Size;
            var texture = new Texture2D(graphicsDevice, size.Width, size.Height);

            texture.SetData(image.AsRgba8888());

            return(texture);
        }
        public ISpriteTexture CreateSpriteTexture(IImageRead image)
        {
            var size    = image.Size;
            var texture = new Texture2D(_graphicsDevice, size.Width, size.Height);

            texture.SetData(image.AsRgba8888());

            return(new CSpriteTexture(texture));
        }
Exemple #9
0
 public static ISurface CreateSurface(this IDrawing drawing, IImageRead image) => drawing
 .CreateSurface(image.Size.Width,
                image.Size.Height,
                Xe.Drawing.PixelFormat.Format32bppArgb,
                SurfaceType.Input,
                new DataResource
 {
     Data   = image.AsBgra8888(),
     Stride = image.Size.Width * 4
 });
Exemple #10
0
        public static BitmapSource GetWindowsMediaImage(this IImageRead image)
        {
            var size = image.Size;

            return(BitmapSource.Create(
                       size.Width, size.Height,
                       96.0, 96.0,
                       GetPixelFormat(image.PixelFormat),
                       GetPalette(image),
                       image.GetData(),
                       size.Width * GetBpp(image.PixelFormat) / 8));
        }
        public static byte[] AsRgba8888(this IImageRead image)
        {
            switch (image.PixelFormat)
            {
            case PixelFormat.Indexed4: return(image.From4bpp(Rgba));

            case PixelFormat.Indexed8: return(image.From8bpp(Rgba));

            default:
                throw new ArgumentException($"The pixel format {image.PixelFormat} is not supported.");
            }
        }
Exemple #12
0
        private static byte[] From32bpp(this IImageRead image, byte[] channelOrder)
        {
            var srcData = image.GetData();
            var dstData = new byte[srcData.Length];

            for (var i = 0; i < srcData.Length; i += 4)
            {
                dstData[i + 0] = srcData[i + channelOrder[0]];
                dstData[i + 1] = srcData[i + channelOrder[1]];
                dstData[i + 2] = srcData[i + channelOrder[2]];
                dstData[i + 3] = srcData[i + channelOrder[3]];
            }

            return(dstData);
        }
Exemple #13
0
        public static byte[] ToBgra32(this IImageRead imageRead)
        {
            switch (imageRead.PixelFormat)
            {
            case PixelFormat.Indexed4:
                return(ImageDataHelpers.FromIndexed4ToBgra(imageRead.GetData(), imageRead.GetClut()));

            case PixelFormat.Indexed8:
                return(ImageDataHelpers.FromIndexed8ToBgra(imageRead.GetData(), imageRead.GetClut()));

            case PixelFormat.Rgba8888:
                return(imageRead.GetData());

            default:
                throw new NotImplementedException($"The PixelFormat {imageRead.PixelFormat} cannot be converted to a Bgra32.");
            }
        }
Exemple #14
0
        private static BitmapPalette GetPalette(IImageRead image)
        {
            var clut        = image.GetClut();
            int colorsCount = clut.Length / 4;

            if (colorsCount == 0)
            {
                return(null);
            }

            var colors = new List <Color>(colorsCount);

            for (var i = 0; i < colorsCount; i++)
            {
                colors.Add(GetColor(clut, i * 4));
            }

            return(new BitmapPalette(colors));
        }
Exemple #15
0
        public static byte[] AsRgba8888(this IImageRead image)
        {
            switch (image.PixelFormat)
            {
            case PixelFormat.Indexed4:
                return(ImageDataHelpers.FromIndexed4ToBitmap32(
                           image.GetData(), image.GetClut(), Rgba));

            case PixelFormat.Indexed8:
                return(ImageDataHelpers.FromIndexed8ToBitmap32(
                           image.GetData(), image.GetClut(), Rgba));

            case PixelFormat.Rgba8888:
                return(ImageDataHelpers.FromBitmap32(image.GetData(), Bgra));

            default:
                throw new ArgumentException($"The pixel format {image.PixelFormat} is not supported.");
            }
        }
Exemple #16
0
        public static Imgd AsImgd(this IImageRead image, bool isSwizzled = false)
        {
            if (image is Imgd imgd)
            {
                return(imgd);
            }
            else
            {
                switch (image.PixelFormat)
                {
                case PixelFormat.Rgba8888:
                case PixelFormat.Rgbx8888:
                    return(new Imgd(image.Size, image.PixelFormat, GetAsRGBA(image.GetData()), image.GetClut(), isSwizzled));

                default:
                    return(new Imgd(image.Size, image.PixelFormat, image.GetData(), image.GetClut(), isSwizzled));
                }
            }
        }
Exemple #17
0
        public static Texture2D CreateTexture(this IImageRead image, GraphicsDevice graphicsDevice)
        {
            var size    = image.Size;
            var texture = new Texture2D(graphicsDevice, size.Width, size.Height);

            if (image.PixelFormat != PixelFormat.Rgba1555)
            {
                texture.SetData(image.AsBgra8888());
            }
            else
            {
                texture = new Texture2D(graphicsDevice, 1, 1);
                byte[] pix = new byte[4];
                pix[0] = 0xFF;
                pix[1] = 0xFF;
                pix[2] = 0xFF;
                pix[3] = 0xFF;
                texture.SetData(pix);
            }

            return(texture);
        }
Exemple #18
0
        private static DataResource GetDataResource(IImageRead image)
        {
            byte[] data;
            switch (image.PixelFormat)
            {
            case Imaging.PixelFormat.Indexed4:
                data = GetDataResource4bpp(image);
                break;

            case Imaging.PixelFormat.Indexed8:
                data = GetDataResource8bpp(image);
                break;

            default:
                throw new ArgumentException($"The pixel format {image.PixelFormat} is not supported.");
            }

            return(new DataResource
            {
                Data = data,
                Stride = image.Size.Width * 4
            });
        }
Exemple #19
0
        internal static Bitmap CreateBitmap(this IImageRead imageRead)
        {
            var    drawingPixelFormat = imageRead.PixelFormat.GetDrawingPixelFormat();
            Bitmap bitmap             = new Bitmap(imageRead.Size.Width, imageRead.Size.Height, drawingPixelFormat);

            var rect       = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
            var bitmapData = bitmap.LockBits(rect, ImageLockMode.WriteOnly, drawingPixelFormat);

            var srcData   = imageRead.GetData();
            var dstLength = Math.Min(srcData.Length, bitmapData.Stride * bitmapData.Height);

            Marshal.Copy(srcData, 0, bitmapData.Scan0, dstLength);

            bitmap.UnlockBits(bitmapData);

            var isIndexed = imageRead.PixelFormat.IsIndexed();

            if (isIndexed)
            {
                var palette     = bitmap.Palette;
                var clut        = imageRead.GetClut();
                var colorsCount = Math.Min(clut.Length / 4, palette.Entries.Length);

                for (var i = 0; i < colorsCount; i++)
                {
                    palette.Entries[i] = Color.FromArgb(
                        clut[i * 4 + 3],
                        clut[i * 4 + 0],
                        clut[i * 4 + 1],
                        clut[i * 4 + 2]);
                }

                bitmap.Palette = palette;
            }

            return(bitmap);
        }
Exemple #20
0
 public ImageViewModel(IImageRead image, int index = -1)
 {
     Source = image;
     Bitmap = Source.GetBimapSource();
     Index  = index;
 }
Exemple #21
0
 public void Write(Stream stream, IImageRead image) => write(stream, image);
 private void InitializeSurface(ref ISpriteTexture spriteTexture, IImageRead image)
 {
     spriteTexture?.Dispose();
     spriteTexture = _drawing?.CreateSpriteTexture(image);
 }
Exemple #23
0
 public ISpriteTexture CreateSpriteTexture(IImageRead image) =>
 CreateSpriteTexture(image.Size.Width, image.Size.Height, image.ToBgra32());
 public ImageHandler(IImageRead imageRead)
 {
     _imageRead = imageRead;
 }
Exemple #25
0
 public TextureModel(IImageRead image)
 {
     MasterImage = image;
 }
Exemple #26
0
 public static ISurface CreateSurface(this IDrawing drawing, IImageRead image) => drawing
 .CreateSurface(image.Size.Width,
                image.Size.Height,
                Xe.Drawing.PixelFormat.Format32bppArgb,
                SurfaceType.Input,
                GetDataResource(image));
Exemple #27
0
 public static Imgd AsImgd(this IImageRead image, bool isSwizzled = false) =>
 new Imgd(image.Size, image.PixelFormat, image.GetData(), image.GetClut(), isSwizzled);
 private void InitializeSurface(ref ISurface surface, IImageRead image)
 {
     surface?.Dispose();
     surface = _drawing?.CreateSurface(image);
 }