Exemplo n.º 1
0
        /// <summary>
        /// 形式指定で書き出す
        /// </summary>
        /// <param name="stream">ストリームー</param>
        /// <param name="format">形式</param>
        /// <param name="enc">エンコーディング(PAMでは無視)</param>
        /// <param name="width">幅</param>
        /// <param name="height">高さ</param>
        /// <param name="channel">チャネル</param>
        /// <param name="arr">ピクセルデター</param>
        public void Write(
            System.IO.Stream stream, フォーマッツ format, エンコーディング enc, int width, int height, ぉ.画素 channel, IEnumerable <ぉ> arr)
        {
            switch (format)
            {
            case フォーマッツ.PBM:
                WritePBM(stream, enc, width, height, channel, arr);
                break;

            case フォーマッツ.PGM:
                WritePGM(stream, enc, width, height, channel, arr);
                break;

            case フォーマッツ.PPM:
                WritePPM(stream, enc, width, height, arr);
                break;

            case フォーマッツ.PAM:
                WritePAM(stream, PNM.ヌプーリ.RGB_ALPHA, width, height, channel, arr);
                break;

            default:
                throw new Xi.それ対応してない(format.ToString());
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// PGM書き込み
        /// </summary>
        /// <param name="stream">ストリームー</param>
        /// <param name="format">形式</param>
        /// <param name="width">幅</param>
        /// <param name="height">高さ</param>
        /// <param name="channel">書き込むチャネル</param>
        /// <param name="arr">ピクセルデター</param>
        public void WritePGM(
            System.IO.Stream stream, エンコーディング format, int width, int height, ぉ.画素 channel, IEnumerable <ぉ> arr)
        {
            var war = new byte[width * height];
            int sr  = 0;

            foreach (var x in arr)
            {
                war[sr++] = (byte)x.ほ(channel);
            }
            WritePGM(stream, format, width, height, war);
        }
Exemplo n.º 3
0
        /// <summary>
        /// PPMを書き込む
        /// </summary>
        /// <param name="stream">ストリームー</param>
        /// <param name="format">形式</param>
        /// <param name="width">幅</param>
        /// <param name="height">高さ</param>
        /// <param name="arr">ピクセルデター</param>
        public void WritePPM(
            System.IO.Stream stream, エンコーディング format, int width, int height, IEnumerable <ぉ> arr)
        {
            int maxx = 0;

            foreach (var k in arr)
            {
                maxx = Math.Max(maxx, k.R);
                maxx = Math.Max(maxx, k.G);
                maxx = Math.Max(maxx, k.B);
            }

            if (format == エンコーディング.バイナリー)
            {
                WritePPMバイナリー(stream, width, height, maxx, arr);
                return;
            }

            StringBuilder sb = new StringBuilder();

            sb.Append($"P3\r\n")
            .Append($"{width} {height}\r\n")
            .Append($"{maxx}\r\n");

            int f = 0;

            foreach (var p in arr)
            {
                sb.Append($"{p.R} {p.G} {p.B}");
                if ((++f % 16) == 0)
                {
                    sb.Append("\r\n");
                }
                else
                {
                    sb.Append(" ");
                }
            }
            sb.Append("\r\n");
            var mp3 = System.Text.Encoding.UTF8.GetBytes(sb.ToString());

            stream.Write(mp3, 0, mp3.Length);
        }
Exemplo n.º 4
0
        /// <summary>
        /// PBMを書き込む
        /// </summary>
        /// <param name="stream">ストリームー</param>
        /// <param name="format">形式</param>
        /// <param name="width">幅</param>
        /// <param name="height">高さ</param>
        /// <param name="arr">ピクセルデター(10形式)</param>
        public void WritePBM(
            System.IO.Stream stream, エンコーディング format, int width, int height, byte[] arr)
        {
            if (format == エンコーディング.バイナリー)
            {
                WritePBMバイナリー(stream, width, height, arr);
                return;
            }

            int           po   = 0;
            var           xpad = width % 8;
            StringBuilder sb   = new StringBuilder();

            sb.Append($"P1\r\n")
            .Append($"{width} {height}\r\n");

            for (int y = 0; y < height; ++y)
            {
                for (int x = 0; x < width; x += 8)
                {
                    int bits = 8;
                    if ((width - x < 8))
                    {
                        bits = xpad;
                    }
                    for (int i = 0; i < bits; ++i)
                    {
                        var w = arr[po++] == 0 ? 1 : 0;
                        sb.Append($"{w}");
                    }
                }
                sb.Append("\r\n");
            }
            sb.Append("\r\n");
            var mp3 = System.Text.Encoding.UTF8.GetBytes(sb.ToString());

            stream.Write(mp3, 0, mp3.Length);
        }
Exemplo n.º 5
0
        /// <summary>
        /// PGMを書き込む
        /// </summary>
        /// <param name="stream">ストリームー</param>
        /// <param name="format">形式</param>
        /// <param name="width">幅</param>
        /// <param name="height">高さ</param>
        /// <param name="arr">ピクセルデター(0~255が詰まってる物)</param>
        public void WritePGM(
            System.IO.Stream stream, エンコーディング format, int width, int height, byte[] arr)
        {
            int maxx = 0;

            foreach (var k in arr)
            {
                maxx = Math.Max(maxx, k);
            }

            if (format == エンコーディング.バイナリー)
            {
                WritePGMバイナリー(stream, width, height, maxx, arr);
                return;
            }

            int           po = 0;
            StringBuilder sb = new StringBuilder();

            sb.Append($"P2\r\n")
            .Append($"{width} {height}\r\n")
            .Append($"{maxx}\r\n");

            for (int y = 0; y < height; ++y)
            {
                for (int x = 0; x < width; x++)
                {
                    sb.Append($"{arr[po++]} ");
                }
                sb.Append("\r\n");
            }
            sb.Append("\r\n");
            var mp3 = System.Text.Encoding.UTF8.GetBytes(sb.ToString());

            stream.Write(mp3, 0, mp3.Length);
        }