Beispiel #1
0
 public static void SavePalettes(Palette[] palettes, string fileName)
 {
     using (var bmp = new Bitmap(palettes.Length, 256))
     {
         var bmData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
         var stride = bmData.Stride;
         var scan0 = bmData.Scan0;
         unsafe
         {
             var p = (byte*)(void*)scan0;
             var nOffset = stride - bmp.Width * 4;
             for (var y = 0; y < bmp.Height; ++y)
             {
                 for (var x = 0; x < bmp.Width; ++x)
                 {
                     p[0] = palettes[x].Colors[y].B;
                     p[1] = palettes[x].Colors[y].G;
                     p[2] = palettes[x].Colors[y].R;
                     p[3] = 255;
                     p += 4;
                 }
                 p += nOffset;
             }
         }
         bmp.UnlockBits(bmData);
         bmp.Save(fileName, ImageFormat.Png);
     }
 }
Beispiel #2
0
        public static Palette[] LoadPalettes(string fileName)
        {
            Palette[] ps;
            using (var bmp = (Bitmap)Image.FromFile(fileName))
            {
                ps = new Palette[bmp.Width];
                for (var i = 0; i < ps.Length; i++)
                    ps[i] = new Palette();

                var bmData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
                var stride = bmData.Stride;
                var scan0 = bmData.Scan0;

                unsafe
                {
                    var p = (byte*)(void*)scan0;
                    var nOffset = stride - bmp.Width * 4;

                    for (var y = 0; y < bmp.Height; ++y)
                    {
                        for (var x = 0; x < bmp.Width; ++x)
                        {
                            ps[x].Colors[y] = new Color(p[2], p[1], p[0]);
                            p += 4;
                        }
                        p += nOffset;
                    }

                }
                bmp.UnlockBits(bmData);
            }
            return ps;
        }