Пример #1
0
        /// <summary>
        /// 色定義を読む
        /// </summary>
        /// <param name="xpm">xpm</param>
        /// <param name="s">ぉ</param>
        /// <returns></returns>
        private bool ParseColors(Xpm xpm, string s)
        {
            var c = 総天然色.Parse(xpm, s);

            xpm.AddColor(c);
            return(true);
        }
Пример #2
0
        /// <summary>
        /// ぉからXPMを生成
        /// </summary>
        /// <param name="width">幅</param>
        /// <param name="height">高さ</param>
        /// <param name="pixels">ピクセルデター</param>
        /// <returns>XPM</returns>
        public static Xpm Fromぉ(int width, int height, ぉ [] pixels)
        {
            var xpm = new Xpm();

            xpm.Rows    = height;
            xpm.Columns = width;
            xpm.AllocPixels();

            int cpp = 0;

            foreach (var c in GenerateColorMap(pixels, out cpp).Values)
            {
                xpm.AddColor(c);
            }
            xpm.NumColors     = xpm.ColorTable.Count;
            xpm.CharsPerPixel = cpp;
            // 逆引きテーブルを作っとく
            var rt = new Dictionary <ぉ, string>();

            foreach (var c in xpm.ColorTable.Keys)
            {
                var s = xpm.ColorTable[c];
                var o = s.Toぉ();
                if (null == o)
                {
                    throw new およよ($"色解決失敗: {s.ToColorString()}");
                }
                if (!rt.ContainsKey(o))
                {
                    rt.Add(o, c);
                }
            }

            int pos = 0;

            for (int y = 0; y < xpm.Rows; ++y)
            {
                for (int x = 0; x < xpm.Columns; ++x)
                {
                    xpm.SetPixel(x, y, rt[pixels[pos]]);
                    pos++;
                }
            }

            return(xpm);
        }