コード例 #1
0
        /// <summary>
        /// P7(グレー+アルファー)
        /// </summary>
        /// <param name="buf"></param>
        /// <param name="pnm"></p
        private Xi.ぉ[] レベル7灰透を読み込む(ref byte[] buf, PNM pnm)
        {
            pnm.現在位置 = 0;
            var r  = new Xi.ぉ[pnm.Width * pnm.Height];
            int po = 0;
            int bo = 0;
            int ps = pnm.Maxval > 255 ? 2 : 1;

            for (int y = 0; y < pnm.Height; ++y)
            {
                for (int x = 0; x < pnm.Width; ++x)
                {
                    if (ps == 1)
                    {
                        var b = buf[bo];
                        var a = buf[bo + 1];
                        r[po++] = new Xi.ぉ(b, b, b, a);
                    }
                    else
                    {
                        var b = buf[bo] | buf[bo + 1] << 8;
                        var a = buf[bo + 2] | buf[bo + 3] << 8;
                        r[po++] = new Xi.ぉ(b, b, b, a);
                    }
                    bo += ps * 2;
                }
            }
            return(r);
        }
コード例 #2
0
        /// <summary>
        /// P7(ベットムッピ+アルファー)
        /// </summary>
        /// <param name="buf"></param>
        /// <param name="pnm"></param>
        /// <returns></returns>
        private Xi.ぉ[] レベル7白黒透を読み込む(ref byte[] buf, PNM pnm)
        {
            pnm.現在位置 = 0;
            var r  = new Xi.ぉ[pnm.Width * pnm.Height];
            int po = 0;
            int bo = 0;
            int ps = pnm.Maxval > 255 ? 4 : 2;

            for (int y = 0; y < pnm.Height; ++y)
            {
                for (int x = 0; x < pnm.Width; ++x)
                {
                    if (ps == 2)
                    {
                        var c = buf[bo] == 0 ? 0x00 : 0xff;
                        var a = buf[bo + 1];
                        r[po++] = new Xi.ぉ(c, c, c, a);
                    }
                    else
                    {
                        var a = (buf[bo] | buf[bo + 1] << 8) == 0 ? 0x00 : 0xff;
                        var c = (buf[bo + 2] | buf[bo + 3] << 8);
                        r[po++] = new Xi.ぉ(c, c, c, a);
                    }
                    bo += ps;
                }
            }
            return(r);
        }
コード例 #3
0
        /// <summary>
        /// P7(ベットムッピ)
        /// </summary>
        /// <param name="buf"></param>
        /// <param name="pnm"></param>
        /// <returns></returns>
        private Xi.ぉ[] レベル7白黒を読み込む(ref byte[] buf, PNM pnm)
        {
            pnm.現在位置 = 0;
            var r  = new Xi.ぉ[pnm.Width * pnm.Height];
            int po = 0;
            int bo = 0;
            int ps = pnm.Maxval > 255 ? 2 : 1;

            for (int y = 0; y < pnm.Height; ++y)
            {
                for (int x = 0; x < pnm.Width; ++x)
                {
                    if (ps == 1)
                    {
                        var b = buf[bo] == 0 ? 0x00 : 0xFF;
                        r[po++] = new Xi.ぉ(b, b, b);
                    }
                    else
                    {
                        var b = (buf[bo] | buf[bo + 1] << 8) == 0 ? 0x00 : 0xFF;
                        r[po++] = new Xi.ぉ(b, b, b);
                    }
                    bo += ps;
                }
            }
            return(r);
        }
コード例 #4
0
        /// <summary>
        /// P7(RGBA)
        /// </summary>
        /// <param name="buf"></param>
        /// <param name="pnm"></param>
        /// <returns></returns>
        private Xi.ぉ[] レベル7赤緑青透を読み込む(ref byte[] buf, PNM pnm)
        {
            pnm.現在位置 = 0;
            var r  = new Xi.ぉ[pnm.Width * pnm.Height];
            int po = 0;
            int bo = 0;
            int ps = pnm.Maxval > 255 ? 2 : 1;

            for (int y = 0; y < pnm.Height; ++y)
            {
                for (int x = 0; x < pnm.Width; ++x)
                {
                    if (ps == 1)
                    {
                        r[po++] = new Xi.ぉ(buf[bo++], buf[bo++], buf[bo++], buf[bo++]);
                    }
                    else
                    {
                        r[po++] = new Xi.ぉ(
                            buf[bo++] | buf[bo++] << 8,
                                buf[bo++] | buf[bo++] << 8,
                                buf[bo++] | buf[bo++] << 8,
                                buf[bo++] | buf[bo++] << 8);
                    }
                }
            }
            return(r);
        }
コード例 #5
0
        /// <summary>
        /// P4ビットマップを原色に変換する
        /// </summary>
        /// <param name="buf"></param>
        /// <param name="pnm"></param>
        /// <returns></returns>
        private Xi.ぉ[] レベル4を読み込む(ref byte[] buf, PNM pnm)
        {
            pnm.現在位置 = 0;
            var r    = new Xi.ぉ[pnm.Width * pnm.Height];
            int po   = 0;
            int bo   = 0;
            var xpad = pnm.Width % 8;

            for (int y = 0; y < pnm.Height; ++y)
            {
                for (int x = 0; x < pnm.Width; x += 8)
                {
                    var b    = buf[bo];
                    int bits = 8;
                    if ((pnm.Width - x < 8) && xpad != 0)
                    {
                        bits = xpad;
                    }
                    for (int i = 0; i < bits; ++i)
                    {
                        r[po++] = ぁゃιぃ(masken[i], b);
                    }
                    bo++;
                }
            }
            return(r);
        }
コード例 #6
0
        /// <summary>
        /// 平文ピクセルを読み込む
        /// </summary>
        /// <param name="buf"></param>
        /// <param name="pnm"></param>
        /// <returns></returns>
        private Xi.ぉ[] 平文ピクセル読み込み(byte[] buf, PNM pnm)
        {
            pnm.現在位置 = 0;
            int cp = 0;
            var r  = new Xi.ぉ[pnm.Width * pnm.Height];
            var kr = new Xi.ぉ(0, 0, 0);

            for (int i = 0; i < r.Count(); ++i)
            {
                var q = pnm.Format == PNM.形式.P1 ? ReadEPixel(ref buf, pnm) : ReadTPixel(ref buf, pnm);
                if (null == q)
                {
                    break;
                }
                r[i] = new Xi.ぉ(0, 0, 0, 0xFF);
                switch (pnm.Format)
                {
                case PNM.形式.P1:
                    var v = (q.Value == 0) ? 0xff : 0x00;
                    r[i].ぃ(v, v, v);
                    break;

                case PNM.形式.P2:
                    r[i].ぃ(q.Value, q.Value, q.Value);
                    break;

                case PNM.形式.P3:
                    r[i].R = q.Value;
                    r[i].G = ReadTPixel(ref buf, pnm).Value;
                    r[i].B = ReadTPixel(ref buf, pnm).Value;
                    break;
                }
                if (cp++ >= r.Length)
                {
                    break;
                }
            }
            return(r);
        }