public Boolean Load(IO.File file, Int32 pcxsize, out Point size, out Texture2D pixels, out Texture2D palette) { if (file == null) throw new ArgumentNullException("file"); size = new Point(Int32.MinValue, Int32.MinValue); pixels = null; palette = null; Byte[] filedata = file.ReadBytes(pcxsize); if (filedata.Length != pcxsize) return false; IO.FileHeaders.PcxFileHeader header = new IO.FileHeaders.PcxFileHeader(filedata); Point tempsize = new Point(header.XMax - header.XMin + 1, header.YMax - header.YMin + 1); if (header.Manufacturer != 10 || header.Encoding != 1 || header.Version > 5 || header.BitsPerPixel != 8) return false; if (header.ColorPlanes != 1) return false; if (tempsize.X <= 0 || tempsize.Y <= 0) return false; size = tempsize; Int32 readoffset = 0; pixels = LoadPixels(filedata, size, header.BytesPerLine, ref readoffset); palette = LoadPalette(filedata, ref readoffset); return true; }
public bool Load(IO.File file, int pcxsize, out Point size, out Texture2D pixels, out Texture2D palette) { if (file == null) { throw new ArgumentNullException(nameof(file)); } size = new Point(int.MinValue, int.MinValue); pixels = null; palette = null; var filedata = file.ReadBytes(pcxsize); if (filedata.Length != pcxsize) { return(false); } var header = new IO.FileHeaders.PcxFileHeader(filedata); var tempsize = new Point(header.XMax - header.XMin + 1, header.YMax - header.YMin + 1); if (header.Manufacturer != 10 || header.Encoding != 1 || header.Version > 5 || header.BitsPerPixel != 8) { return(false); } if (header.ColorPlanes != 1) { return(false); } if (tempsize.X <= 0 || tempsize.Y <= 0) { return(false); } size = tempsize; var readoffset = 0; pixels = LoadPixels(filedata, size, header.BytesPerLine, ref readoffset); palette = LoadPalette(filedata, ref readoffset); return(true); }