/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }