Пример #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name=""></param>
        private void SetTOBJs(HSD_TOBJ[] tobjs)
        {
            if (TOBJ != null)
            {
                TOBJ._s.References.Clear();
                foreach (var r in tobjs[0]._s.References)
                {
                    TOBJ._s.References.Add(r.Key, r.Value);
                }
                TOBJ._s.SetData(tobjs[0]._s.GetData());
            }

            if (TexAnim != null)
            {
                var imgs = new List <HSD_TexBuffer>();
                var pals = new List <HSD_TlutBuffer>();

                foreach (var tobj in tobjs)
                {
                    HSD_TexBuffer buf = new HSD_TexBuffer();
                    buf.Data = tobj.ImageData;
                    imgs.Add(buf);

                    if (ImageDataFormat.IsPalettedFormat(tobj.ImageData.Format))
                    {
                        HSD_TlutBuffer palbuf = new HSD_TlutBuffer();
                        palbuf.Data = tobj.TlutData;
                        pals.Add(palbuf);
                    }
                }

                // convert tobjs into proper strip
                var ib = new HSDArrayAccessor <HSD_TexBuffer>();
                ib.Array = imgs.ToArray();

                TexAnim.ImageBuffers = ib;

                if (tobjs.Length > 0 && ImageDataFormat.IsPalettedFormat(tobjs[0].ImageData.Format))
                {
                    var tb = new HSDRaw.HSDArrayAccessor <HSD_TlutBuffer>();
                    tb.Array = pals.ToArray();

                    TexAnim.TlutBuffers = tb;
                }
                else
                {
                    TexAnim.TlutBuffers = null;
                }
            }

            if (TEXG != null)
            {
                TEXG.SetFromTOBJs(tobjs);
                Node.Refresh();
            }
        }
Пример #2
0
        /// <summary>
        ///  将Base64字符串转换为图片
        /// </summary>
        /// <param name="base64">字串</param>
        /// <param name="format"></param>
        /// <param name="width">如果是RAW格式,需要填入宽高</param>
        /// <param name="height">如果是RAW格式,需要填入宽高</param>
        /// <returns>图片</returns>
        public static Image Base64ToImg(this string base64, ImageDataFormat format = ImageDataFormat.FILE, int width = 0, int height = 0)
        {
            var heads = new string[] { "png", "jgp", "jpg", "jpeg" };

            foreach (var head in heads)
            {
                base64 = base64.Replace($"data:image/{head};base64,", "");
            }
            var bytes = Convert.FromBase64String(base64);

            return(bytes.ToImage(format, width, height));
        }
Пример #3
0
        //Legacy Methods

        public void set_image_dim_ordering(ImageDimOrder dim_ordering)
        {
            if (dim_ordering == ImageDimOrder.th)
            {
                _IMAGE_DATA_FORMAT = ImageDataFormat.channels_first;
            }
            else if (dim_ordering == ImageDimOrder.tf)
            {
                _IMAGE_DATA_FORMAT = ImageDataFormat.channels_last;
            }
            else
            {
                throw new Exception("Unknown dim_ordering:" + dim_ordering);
            }
        }
Пример #4
0
        private void cbFormat_SelectedIndexChanged(object sender, EventArgs e)
        {
            sbPalFormat.Enabled = ImageDataFormat.IsPalettedFormat(TextureFormat);

            propertyGrid1.SelectedObject = null;

            if (TextureFormat == GXTexFmt.IA4 || TextureFormat == GXTexFmt.IA8)
            {
                propertyGrid1.SelectedObject = IASettings;
            }

            if (TextureFormat == GXTexFmt.I8 || TextureFormat == GXTexFmt.I4)
            {
                propertyGrid1.SelectedObject = ISettings;
            }
        }
Пример #5
0
 public void set_image_data_format(ImageDataFormat data_format) => _IMAGE_DATA_FORMAT = data_format;
Пример #6
0
        private void importFramesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (TexAnim == null)
            {
                return;
            }

            var files = Tools.FileIO.OpenFiles(ApplicationSettings.ImageFileFilter);

            if (files != null)
            {
                using (TextureImportDialog td = new TextureImportDialog())
                {
                    if (td.ShowDialog() == DialogResult.OK)
                    {
                        var matched = new HashSet <int>();
                        var tobjs   = new List <HSD_TexBuffer>();
                        var pals    = new List <HSD_TlutBuffer>();
                        foreach (var f in files)
                        {
                            int num = 0;
                            int.TryParse(Regex.Match(Path.GetFileName(f).ToLower(), @"(?<=.*_)(\d+?)(?=\.)").Name, out num);
                            Console.WriteLine(num + " " + Regex.Match(Path.GetFileName(f).ToLower(), @"(?<=.*_)(\d+?)(?=\.)").Groups[0].Value);
                            if (!int.TryParse(Regex.Match(Path.GetFileName(f).ToLower(), @"(?<=.*_)(\d+?)(?=\.)").Groups[0].Value, out num) || matched.Contains(num))
                            {
                                throw new InvalidDataException(num + " " + Path.GetFileName(f) + " is missing index tag or has duplicate index");
                            }
                            else
                            {
                                HSD_TOBJ temp = new HSD_TOBJ();
                                TOBJConverter.InjectBitmap(f, temp, td.TextureFormat, td.PaletteFormat);

                                HSD_TexBuffer buf = new HSD_TexBuffer();
                                buf.Data = temp.ImageData;
                                tobjs.Add(buf);

                                if (ImageDataFormat.IsPalettedFormat(td.TextureFormat))
                                {
                                    HSD_TlutBuffer palbuf = new HSD_TlutBuffer();
                                    palbuf.Data = temp.TlutData;
                                    pals.Add(palbuf);
                                }

                                matched.Add(num);
                            }
                        }

                        // convert tobjs into proper strip
                        var ib = new HSDArrayAccessor <HSD_TexBuffer>();
                        ib.Array = tobjs.ToArray();

                        TexAnim.ImageBuffers = ib;

                        if (ImageDataFormat.IsPalettedFormat(td.TextureFormat))
                        {
                            var tb = new HSDRaw.HSDArrayAccessor <HSD_TlutBuffer>();
                            tb.Array = pals.ToArray();

                            TexAnim.TlutBuffers = tb;

                            if (TexAnim?.AnimationObject?.FObjDesc?.List.Count < 2)
                            {
                                TexAnim.AnimationObject.FObjDesc.Next = new HSD_FOBJDesc();
                                TexAnim.AnimationObject.FObjDesc.Next.FromFOBJ(new HSD_FOBJ()
                                {
                                    JointTrackType = JointTrackType.HSD_A_J_SCAX, Buffer = new byte[0]
                                });
                            }
                        }
                        else
                        {
                            TexAnim.TlutBuffers = null;
                            if (TexAnim?.AnimationObject?.FObjDesc?.List.Count > 1)
                            {
                                TexAnim.AnimationObject.FObjDesc.Next = null;
                            }
                        }

                        Node = Node;
                    }
                }
            }
        }
Пример #7
0
 public static extern bool TexImage(int width, int height, int depth, byte bpp, ImageDataFormat format, ImageDataType type, byte[] data);
Пример #8
0
 public static extern bool ConvertImage(ImageDataFormat destFormat, ImageDataType destType);
Пример #9
0
        /// <summary>
        /// Byte数组转Image
        /// </summary>
        /// <param name="data"></param>
        /// <param name="format">如果数据格式为常见文件格式(JPG,BMP,PNG,...)无需改此参数,会自动识别.</param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <returns></returns>
        public static Bitmap ToImage(this byte[] data, ImageDataFormat format = ImageDataFormat.FILE, int width = 0, int height = 0)
        {
            if (data == null)
            {
                return(null);
            }
            Bitmap img = null;

            switch (format)
            {
            case ImageDataFormat.GIF:
            case ImageDataFormat.FILE:
            {
                using (var ms = new MemoryStream(data)) using (var tmp = Bitmap.FromStream(ms)) img = (Bitmap)tmp.DeepCopyBitmap();
                break;
            }

            case ImageDataFormat.RAW_RGB24:
            {
                img = new Bitmap(width, height, PixelFormat.Format32bppPArgb);
                var imglocker = img.LockBits(new Rectangle(0, 0, img.Width, img.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppPArgb);
                var bgrabuff  = new byte[img.Width * img.Height * 4];
                for (int i = 0; i < img.Width * img.Height; i++)
                {
                    bgrabuff[i * 4 + 0] = data[i * 3 + 2];
                    bgrabuff[i * 4 + 1] = data[i * 3 + 1];
                    bgrabuff[i * 4 + 2] = data[i * 3 + 0];
                    bgrabuff[i * 4 + 3] = 0xFF;
                }
                Marshal.Copy(bgrabuff, 0, imglocker.Scan0, bgrabuff.Length);
                img.UnlockBits(imglocker);
                break;
            }

            case ImageDataFormat.RAW_ARGB32:
            {
                img = new Bitmap(width, height, PixelFormat.Format32bppPArgb);
                var imglocker = img.LockBits(new Rectangle(0, 0, img.Width, img.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppPArgb);
                var bgrabuff  = new byte[img.Width * img.Height * 4];
                for (int i = 0; i < img.Width * img.Height; i++)
                {
                    bgrabuff[i * 4 + 0] = data[i * 4 + 3];
                    bgrabuff[i * 4 + 1] = data[i * 4 + 2];
                    bgrabuff[i * 4 + 2] = data[i * 4 + 1];
                    bgrabuff[i * 4 + 3] = data[i * 4 + 0];
                }
                Marshal.Copy(bgrabuff, 0, imglocker.Scan0, bgrabuff.Length);
                img.UnlockBits(imglocker);
                break;
            }

            case ImageDataFormat.RAW_BGR24:
            {
                img = new Bitmap(width, height, PixelFormat.Format32bppPArgb);
                var imglocker = img.LockBits(new Rectangle(0, 0, img.Width, img.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppPArgb);
                var bgrabuff  = new byte[img.Width * img.Height * 4];
                for (int i = 0; i < img.Width * img.Height; i++)
                {
                    bgrabuff[i * 4 + 0] = data[i * 3 + 0];
                    bgrabuff[i * 4 + 1] = data[i * 3 + 1];
                    bgrabuff[i * 4 + 2] = data[i * 3 + 2];
                    bgrabuff[i * 4 + 3] = 0xFF;
                }
                Marshal.Copy(bgrabuff, 0, imglocker.Scan0, bgrabuff.Length);
                img.UnlockBits(imglocker);
                break;
            }

            case ImageDataFormat.RAW_RGBA32:
            {
                img = new Bitmap(width, height, PixelFormat.Format32bppPArgb);
                var imglocker = img.LockBits(new Rectangle(0, 0, img.Width, img.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppPArgb);
                var bgrabuff  = new byte[img.Width * img.Height * 4];
                for (int i = 0; i < img.Width * img.Height; i++)
                {
                    bgrabuff[i * 4 + 0] = data[i * 4 + 2];
                    bgrabuff[i * 4 + 1] = data[i * 4 + 1];
                    bgrabuff[i * 4 + 2] = data[i * 4 + 0];
                    bgrabuff[i * 4 + 3] = data[i * 4 + 3];
                }
                Marshal.Copy(bgrabuff, 0, imglocker.Scan0, bgrabuff.Length);
                img.UnlockBits(imglocker);
                break;
            }

            default: break;
            }
            return(img);
        }
Пример #10
0
        /// <summary>
        /// 图片转byte数组
        /// </summary>
        /// <param name="img"></param>
        /// <param name="format">如果为FILE,以fileformat决定格式</param>
        /// <param name="fileformat">默认为JPG格式</param>
        /// <returns></returns>
        public static byte[] ImgToBytes(this Bitmap img, ImageDataFormat format = ImageDataFormat.FILE, ImageFormat fileformat = null)
        {
            byte[] buff = null;
            switch (format)
            {
            case ImageDataFormat.FILE:
            {
                using (var ms = new MemoryStream())
                {
                    img.Save(ms, fileformat == null ? System.Drawing.Imaging.ImageFormat.Jpeg : fileformat);
                    buff = ms.ToArray();
                }
                break;
            }

            case ImageDataFormat.RAW_RGB24:
            {
                buff = new byte[img.Width * img.Height * 3];
                var bgrabuff = new byte[img.Width * img.Height * 4];
                var data     = img.LockBits(new Rectangle(0, 0, img.Width, img.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
                Marshal.Copy(data.Scan0, bgrabuff, 0, bgrabuff.Length);
                img.UnlockBits(data);
                for (int i = 0; i < img.Width * img.Height; i++)
                {
                    buff[i * 3 + 0] = bgrabuff[i * 4 + 2];
                    buff[i * 3 + 1] = bgrabuff[i * 4 + 1];
                    buff[i * 3 + 2] = bgrabuff[i * 4 + 0];
                }
                break;
            }

            case ImageDataFormat.RAW_ARGB32:
            {
                buff = new byte[img.Width * img.Height * 4];
                var bgrabuff = new byte[img.Width * img.Height * 4];
                var data     = img.LockBits(new Rectangle(0, 0, img.Width, img.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
                Marshal.Copy(data.Scan0, bgrabuff, 0, bgrabuff.Length);
                img.UnlockBits(data);
                for (int i = 0; i < img.Width * img.Height; i++)
                {
                    buff[i * 4 + 0] = bgrabuff[i * 4 + 3];
                    buff[i * 4 + 1] = bgrabuff[i * 4 + 2];
                    buff[i * 4 + 2] = bgrabuff[i * 4 + 1];
                    buff[i * 4 + 3] = bgrabuff[i * 4 + 0];
                }
                break;
            }

            case ImageDataFormat.RAW_BGR24:
            {
                buff = new byte[img.Width * img.Height * 3];
                var bgrabuff = new byte[img.Width * img.Height * 4];
                var data     = img.LockBits(new Rectangle(0, 0, img.Width, img.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
                Marshal.Copy(data.Scan0, bgrabuff, 0, bgrabuff.Length);
                img.UnlockBits(data);
                for (int i = 0; i < img.Width * img.Height; i++)
                {
                    buff[i * 3 + 0] = bgrabuff[i * 4 + 0];
                    buff[i * 3 + 1] = bgrabuff[i * 4 + 1];
                    buff[i * 3 + 2] = bgrabuff[i * 4 + 2];
                }
                break;
            }

            case ImageDataFormat.RAW_RGBA32:
            {
                buff = new byte[img.Width * img.Height * 4];
                var bgrabuff = new byte[img.Width * img.Height * 4];
                var data     = img.LockBits(new Rectangle(0, 0, img.Width, img.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
                Marshal.Copy(data.Scan0, bgrabuff, 0, bgrabuff.Length);
                img.UnlockBits(data);
                for (int i = 0; i < img.Width * img.Height; i++)
                {
                    buff[i * 4 + 0] = bgrabuff[i * 4 + 2];
                    buff[i * 4 + 1] = bgrabuff[i * 4 + 1];
                    buff[i * 4 + 2] = bgrabuff[i * 4 + 0];
                    buff[i * 4 + 3] = bgrabuff[i * 4 + 3];
                }
                break;
            }

            case ImageDataFormat.GIF:
            {
                using (var ms = new MemoryStream())
                {
                    var gif = new Bitmap(img.Width, img.Height);
                    foreach (var guid in img.FrameDimensionsList)
                    {
                        int pagenum = img.GetFrameCount(new FrameDimension(guid));                                        //总帧数
                        img.SelectActiveFrame(FrameDimension.Time, 0);
                        gif.Edit((g) => g.DrawImage(img, 0, 0));
                        foreach (var p in img.PropertyItems)
                        {
                            gif.SetPropertyItem(p);
                        }
                        gif.Save(ms, GifInfo, MultiFrameEps);
                        //枚举每一帧
                        for (int i = 1; i < pagenum; i++)
                        {
                            img.SelectActiveFrame(FrameDimension.Time, i);
                            gif.SaveAdd(img, FrameDimensionTimeEps);                                            //如果是GIF这里设置为FrameDimensionTime,如果为TIFF则设置为FrameDimensionPage
                        }
                    }
                    //结束帧
                    gif.SaveAdd(FlushEps);
                    gif.Dispose();
                    buff = ms.ToArray();
                }
                break;
            }

            default: break;
            }
            return(buff);
        }
Пример #11
0
 /// <summary>
 /// 图片转byte数组
 /// </summary>
 /// <param name="img"></param>
 /// <param name="format">如果为FILE,以fileformat决定格式</param>
 /// <param name="fileformat">默认为JPG格式</param>
 /// <returns></returns>
 public static byte[] ImgToBytes(this Image img, ImageDataFormat format = ImageDataFormat.FILE, ImageFormat fileformat = null) => ImgToBytes((Bitmap)img, format, fileformat);
Пример #12
0
 /// <summary>
 /// 图片转base64字符串
 /// </summary>
 /// <param name="img"></param>
 /// <param name="format">如果为FILE,以fileformat决定格式</param>
 /// <param name="fileformat">默认为JPG格式</param>
 /// <returns></returns>
 public static string ImgToBase64(this Image img, ImageDataFormat format = ImageDataFormat.FILE, ImageFormat fileformat = null) => Convert.ToBase64String(img.ImgToBytes(format, fileformat));
Пример #13
0
        public IImage ToBitmap()
        {
            ImageDataFormat imageDataFormat = (ImageDataFormat)null;

            switch ((byte)this.Header.Format)
            {
            case 0:
                imageDataFormat = ImageDataFormat.I4;
                break;

            case 1:
                imageDataFormat = ImageDataFormat.I8;
                break;

            case 2:
                imageDataFormat = ImageDataFormat.IA4;
                break;

            case 3:
                imageDataFormat = ImageDataFormat.IA8;
                break;

            case 4:
                imageDataFormat = ImageDataFormat.RGB565;
                break;

            case 5:
                imageDataFormat = ImageDataFormat.RGB5A3;
                break;

            case 6:
                imageDataFormat = ImageDataFormat.Rgba32;
                break;

            case 14:
                imageDataFormat = ImageDataFormat.Cmpr;
                break;
            }
            byte[] numArray = imageDataFormat.ConvertFrom(
                this.Data, (int)this.Header.Width, (int)this.Header.Height,
                (ProgressChangedEventHandler)null);

            var width  = this.Header.Width;
            var height = this.Header.Height;

            var bitmap = new Rgba32Image(width, height);

            bitmap.Mutate((_, setHandler) => {
                for (var y = 0; y < height; ++y)
                {
                    for (var x = 0; x < width; ++x)
                    {
                        var i = 4 * (y * width + x);

                        var b = numArray[i + 0];
                        var g = numArray[i + 1];
                        var r = numArray[i + 2];
                        var a = numArray[i + 3];

                        setHandler(x, y, r, g, b, a);
                    }
                }
            });

            return(bitmap);
        }