示例#1
0
文件: PnmImage.cs 项目: zer09/Cosmos
 internal static string GetMagicWord(PnmType ptype, PnmEncoding encoding)
 {
     if ((ptype == PnmType.Pgm) && (encoding == PnmEncoding.ASCIIEncoding))
     {
         return("P2");
     }
     if ((ptype != PnmType.Pgm) || (encoding != PnmEncoding.BinaryEncoding))
     {
         if ((ptype == PnmType.Ppm) && (encoding == PnmEncoding.ASCIIEncoding))
         {
             return("P3");
         }
         if ((ptype == PnmType.Ppm) && (encoding == PnmEncoding.BinaryEncoding))
         {
             return("P6");
         }
         if ((ptype == PnmType.Pbm) && (encoding == PnmEncoding.ASCIIEncoding))
         {
             return("P1");
         }
         if ((ptype == PnmType.Pbm) && (encoding == PnmEncoding.BinaryEncoding))
         {
             throw new Exception("PBM files are only written in ASCII encoding.");
         }
     }
     return("P5");
 }
示例#2
0
文件: PnmImage.cs 项目: zer09/Cosmos
            public static Image ReadPnm(Stream inputStream)
            {
                char   ch;
                string str;
                string magicWord = ((char)inputStream.ReadByte()).ToString() + ((char)inputStream.ReadByte()).ToString();

                inputStream.ReadByte();
                PnmEncoding    pNMEncoding    = PnmFactory.GetPNMEncoding(magicWord);
                IPnmDataReader iPNMDataReader = PnmFactory.GetIPNMDataReader(inputStream, pNMEncoding);

                if (iPNMDataReader == null)
                {
                    throw new Exception("Currently only Binary and ASCII encoding is supported");
                }
                IPnmReader iPNMReader = PnmFactory.GetIPNMReader(PnmFactory.GetPNMType(magicWord));

                if (iPNMReader == null)
                {
                    throw new Exception("Currently only PBM, PGM and PNM Image Types are supported");
                }
                do
                {
                    str = iPNMDataReader.ReadLine();
                    if (str.Length == 0)
                    {
                        ch = '#';
                    }
                    else
                    {
                        ch = str.Substring(0, 1).ToCharArray(0, 1)[0];
                    }
                }while (ch == '#');
                string[] strArray = str.Split(new char[] { ' ' });
                int      width    = int.Parse(strArray[0]);
                int      height   = int.Parse(strArray[1]);

                if (magicWord != "P1")
                {
                    do
                    {
                        str = iPNMDataReader.ReadLine();
                        if (str.Length == 0)
                        {
                            ch = '#';
                        }
                        else
                        {
                            ch = str.Substring(0, 1).ToCharArray(0, 1)[0];
                        }
                    }while (ch == '#');
                    if (int.Parse(str) != 0xff)
                    {
                        Console.WriteLine("Warning, max value for pixels in this image is not 255");
                    }
                }
                return(iPNMReader.ReadImageData(iPNMDataReader, width, height));
            }
示例#3
0
文件: PnmImage.cs 项目: zer09/Cosmos
            internal static IPnmDataWriter GetIPNMDataWriter(Stream fs, PnmEncoding encoding)
            {
                switch (encoding)
                {
                case PnmEncoding.BinaryEncoding:
                    return(new BinaryDataWriter(fs));

                case PnmEncoding.ASCIIEncoding:
                    return(new ASCIIDataWriter(fs));
                }
                return(null);
            }
示例#4
0
文件: PnmImage.cs 项目: zer09/Cosmos
            public static void WritePnm(Stream fs, Image im, PnmEncoding encoding, PnmType ptype)
            {
                IPnmDataWriter iPNMDataWriter = PnmFactory.GetIPNMDataWriter(fs, encoding);

                if (iPNMDataWriter == null)
                {
                    throw new Exception("Currently only Binary and ASCII encoding is supported");
                }
                try
                {
                    iPNMDataWriter.WriteLine(PnmFactory.GetMagicWord(ptype, encoding));
                    iPNMDataWriter.WriteLine(im.Width.ToString() + " " + im.Height.ToString());
                    if (ptype != PnmType.Pbm)
                    {
                        iPNMDataWriter.WriteLine("255");
                    }
                    PnmFactory.GetIPNMWriter(ptype).WriteImageData(iPNMDataWriter, im);
                }
                catch
                {
                    throw;
                }
            }
示例#5
0
 internal static string GetMagicWord(PnmType ptype, PnmEncoding encoding)
 {
     if ((ptype == PnmType.Pgm) && (encoding == PnmEncoding.ASCIIEncoding))
     {
         return "P2";
     }
     if ((ptype != PnmType.Pgm) || (encoding != PnmEncoding.BinaryEncoding))
     {
         if ((ptype == PnmType.Ppm) && (encoding == PnmEncoding.ASCIIEncoding))
         {
             return "P3";
         }
         if ((ptype == PnmType.Ppm) && (encoding == PnmEncoding.BinaryEncoding))
         {
             return "P6";
         }
         if ((ptype == PnmType.Pbm) && (encoding == PnmEncoding.ASCIIEncoding))
         {
             return "P1";
         }
         if ((ptype == PnmType.Pbm) && (encoding == PnmEncoding.BinaryEncoding))
         {
             throw new Exception("PBM files are only written in ASCII encoding.");
         }
     }
     return "P5";
 }
示例#6
0
            internal static IPnmDataWriter GetIPNMDataWriter(Stream fs, PnmEncoding encoding)
            {
                switch (encoding)
                {
                    case PnmEncoding.BinaryEncoding:
                        return new BinaryDataWriter(fs);

                    case PnmEncoding.ASCIIEncoding:
                        return new ASCIIDataWriter(fs);
                }
                return null;
            }
示例#7
0
 public static void WritePnm(Stream fs, Image im, PnmEncoding encoding, PnmType ptype)
 {
     IPnmDataWriter iPNMDataWriter = PnmFactory.GetIPNMDataWriter(fs, encoding);
     if (iPNMDataWriter == null)
     {
         throw new Exception("Currently only Binary and ASCII encoding is supported");
     }
     try
     {
         iPNMDataWriter.WriteLine(PnmFactory.GetMagicWord(ptype, encoding));
         iPNMDataWriter.WriteLine(im.Width.ToString() + " " + im.Height.ToString());
         if (ptype != PnmType.Pbm)
         {
             iPNMDataWriter.WriteLine("255");
         }
         PnmFactory.GetIPNMWriter(ptype).WriteImageData(iPNMDataWriter, im);
     }
     catch
     {
         throw;
     }
 }