Esempio n. 1
0
            public static STim Decode4(byte[] picbin, byte[] palbin, int tbw, int cx, int cy)
            {
                var bitmap = new Bitmap(cx, cy, PixelFormat.Format4bppIndexed);

                tbw /= 2;
                byte[]     array      = Reform4.Decode4(picbin, tbw, Math.Max(1, picbin.Length / 8192 / tbw));
                BitmapData bitmapData = bitmap.LockBits(Rectangle.FromLTRB(0, 0, bitmap.Width, bitmap.Height),
                                                        ImageLockMode.WriteOnly, PixelFormat.Format4bppIndexed);

                try
                {
                    int val = bitmapData.Stride * bitmapData.Height;
                    Marshal.Copy(array, 0, bitmapData.Scan0, Math.Min(array.Length, val));
                }
                finally
                {
                    bitmap.UnlockBits(bitmapData);
                }
                ColorPalette palette = bitmap.Palette;
                int          num     = 0;

                for (int i = 0; i < 16; i++)
                {
                    palette.Entries[i] =
                        CUtil.NoGamma(
                            Color.FromArgb(AcUt.GetA(palbin[num + 4 * i + 3]), palbin[num + 4 * i], palbin[num + 4 * i + 1],
                                           palbin[num + 4 * i + 2]), 0.5f);
                }
                bitmap.Palette = palette;
                return(new STim(bitmap));
            }
Esempio n. 2
0
            public static STim Decode4(byte[] picbin, byte[] palbin, int tbw, int cx, int cy)
            {
                Bitmap pic = new Bitmap(cx, cy, global::System.Drawing.Imaging.PixelFormat.Format4bppIndexed);

                tbw /= 2;
                XDebug.Assert(tbw != 0, "Invalid");
                byte[]     bin = OpenKh.Kh2.Ps2.Decode4(picbin, tbw, Math.Max(1, picbin.Length / 8192 / tbw));
                BitmapData bd  = pic.LockBits(Rectangle.FromLTRB(0, 0, pic.Width, pic.Height), ImageLockMode.WriteOnly, global::System.Drawing.Imaging.PixelFormat.Format4bppIndexed);

                try
                {
                    int buffSize = bd.Stride * bd.Height;
                    global::System.Runtime.InteropServices.Marshal.Copy(bin, 0, bd.Scan0, Math.Min(bin.Length, buffSize));
                }
                finally
                {
                    pic.UnlockBits(bd);
                }
                ColorPalette pals = pic.Palette;
                int          psi  = 0;

                for (int pi = 0; pi < 16; pi++)
                {
                    pals.Entries[pi] = CUtil.Gamma(Color.FromArgb(
                                                       AcUt.GetA(palbin[psi + 4 * pi + 3]),
                                                       palbin[psi + 4 * pi + 0],
                                                       palbin[psi + 4 * pi + 1],
                                                       palbin[psi + 4 * pi + 2]
                                                       ), γ);
                }
                pic.Palette = pals;

                return(new STim(pic));
            }
Esempio n. 3
0
            public static STim Decode8(byte[] picbin, byte[] palbin, int tbw, int cx, int cy)
            {
                var bitmap = new Bitmap(cx, cy, PixelFormat.Format8bppIndexed);

                tbw /= 2;
                byte[]     array      = Reform8.Decode8(picbin, tbw, Math.Max(1, picbin.Length / 8192 / tbw));
                BitmapData bitmapData = bitmap.LockBits(Rectangle.FromLTRB(0, 0, bitmap.Width, bitmap.Height),
                                                        ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);

                try
                {
                    int val = bitmapData.Stride * bitmapData.Height;
                    Marshal.Copy(array, 0, bitmapData.Scan0, Math.Min(array.Length, val));
                }
                finally
                {
                    bitmap.UnlockBits(bitmapData);
                }
                ColorPalette palette = bitmap.Palette;
                int          num     = 0;
                var          array2  = new byte[1024];

                for (int i = 0; i < 256; i++)
                {
                    int num2 = KHcv8pal.repl(i);
                    Array.Copy(palbin, 4 * i, array2, 4 * num2, 4);
                }
                Array.Copy(array2, 0, palbin, 0, 1024);
                for (int j = 0; j < 256; j++)
                {
                    palette.Entries[j] =
                        CUtil.NoGamma(
                            Color.FromArgb(AcUt.GetA(palbin[num + 4 * j + 3]) ^ (j & 1),
                                           Math.Min(255, palbin[num + 4 * j] + 1), Math.Min(255, palbin[num + 4 * j + 1] + 1),
                                           Math.Min(255, palbin[num + 4 * j + 2] + 1)), 0.5f);
                }
                bitmap.Palette = palette;
                return(new STim(bitmap));
            }