byte[] ReadPixelsData(IBinaryStream file, RctMetaData meta) { byte[] base_image = null; if (meta.FileName != null && meta.BaseNameLength > 0 && OverlayFrames.Get <bool>() && meta.BaseRecursionDepth < BaseRecursionLimit) { base_image = ReadBaseImage(file, meta); } file.Position = meta.DataOffset + meta.BaseNameLength; if (meta.IsEncrypted) { file = OpenEncryptedStream(file, meta.DataSize); } try { using (var reader = new Reader(file, meta)) { reader.Unpack(); if (base_image != null) { return(CombineImage(base_image, reader.Data)); } return(reader.Data); } } catch { if (meta.IsEncrypted) { Key = null; // probably incorrect encryption scheme caused exception, reset key } throw; } }
byte[] ReadBaseImage(IBinaryStream file, RctMetaData meta) { try { file.Position = meta.DataOffset; var name = file.ReadCString(meta.BaseNameLength); string dir_name = VFS.GetDirectoryName(meta.FileName); name = VFS.CombinePath(dir_name, name); if (VFS.FileExists(name)) { using (var base_file = VFS.OpenBinaryStream(name)) { var base_info = ReadMetaData(base_file) as RctMetaData; if (null != base_info && meta.Width == base_info.Width && meta.Height == base_info.Height) { base_info.BaseRecursionDepth = meta.BaseRecursionDepth + 1; base_info.FileName = name; return(ReadPixelsData(base_file, base_info)); } } } } catch { /* ignore baseline image read errors */ } return(null); }
byte[] ReadBaseImage(Stream file, RctMetaData meta) { file.Position = meta.DataOffset; byte[] name_bin = new byte[meta.AddSize]; if (name_bin.Length != file.Read(name_bin, 0, name_bin.Length)) { throw new EndOfStreamException(); } try { string name = Encodings.cp932.GetString(name_bin, 0, name_bin.Length - 1); string dir_name = Path.GetDirectoryName(meta.FileName); name = VFS.CombinePath(dir_name, name); if (VFS.FileExists(name)) { using (var base_file = VFS.OpenSeekableStream(name)) { var base_info = ReadMetaData(base_file) as RctMetaData; if (null != base_info && 0 == base_info.AddSize && meta.Width == base_info.Width && meta.Height == base_info.Height) { base_info.FileName = name; return(ReadPixelsData(base_file, base_info)); } } } } catch { /* ignore baseline image read errors */ } return(null); }
ImageData ApplyMaskToImage(RctMetaData info, byte[] image, string mask_name) { using (var mask_file = VFS.OpenBinaryStream(mask_name)) { var mask_info = s_rc8_format.Value.ReadMetaData(mask_file); if (null == mask_info || info.Width != mask_info.Width || info.Height != mask_info.Height) { throw new InvalidFormatException(); } using (var reader = new Rc8Format.Reader(mask_file, mask_info)) { reader.Unpack(); var palette = reader.Palette; int dst_stride = (int)info.Width * 4; var pixels = new byte[dst_stride * (int)info.Height]; var alpha = reader.Data; int a_src = 0; int src = 0; for (int dst = 0; dst < pixels.Length; dst += 4) { pixels[dst] = image[src++]; pixels[dst + 1] = image[src++]; pixels[dst + 2] = image[src++]; var color = palette[alpha[a_src++]]; pixels[dst + 3] = (byte)~((color.B + color.G + color.R) / 3); } return(ImageData.Create(info, PixelFormats.Bgra32, null, pixels, dst_stride)); } } }
byte[] ReadPixelsData(Stream file, RctMetaData meta) { file.Position = meta.DataOffset + meta.AddSize; if (meta.IsEncrypted) { file = OpenEncryptedStream(file, meta.DataSize); } try { using (var reader = new Reader(file, meta)) { reader.Unpack(); return(reader.Data); } } catch { if (meta.IsEncrypted) { Key = null; // probably incorrect encryption scheme caused exception, reset key } throw; } }
public Reader(IBinaryStream file, RctMetaData info) { m_width = info.Width; m_data = new byte[m_width * info.Height * 3]; m_input = file; }
public Reader(Stream file, RctMetaData info) { m_width = info.Width; m_data = new byte[m_width * info.Height * 3]; m_input = new BinaryReader(file, Encoding.ASCII, true); }
public Reader(Stream file, RctMetaData info) { m_width = info.Width; m_data = new byte[m_width * info.Height * 3]; m_input = new BinaryReader (file, Encoding.ASCII, true); }
byte[] ReadPixelsData(Stream file, RctMetaData meta) { file.Position = meta.DataOffset + meta.AddSize; if (meta.IsEncrypted) file = OpenEncryptedStream (file, meta.DataSize); try { using (var reader = new Reader (file, meta)) { reader.Unpack(); return reader.Data; } } catch { if (meta.IsEncrypted) Key = null; // probably incorrect encryption scheme caused exception, reset key throw; } }
byte[] ReadBaseImage(Stream file, RctMetaData meta) { file.Position = meta.DataOffset; byte[] name_bin = new byte[meta.AddSize]; if (name_bin.Length != file.Read (name_bin, 0, name_bin.Length)) throw new EndOfStreamException(); try { string name = Encodings.cp932.GetString (name_bin, 0, name_bin.Length-1); string dir_name = VFS.GetDirectoryName (meta.FileName); name = VFS.CombinePath (dir_name, name); if (VFS.FileExists (name)) { using (var base_file = VFS.OpenSeekableStream (name)) { var base_info = ReadMetaData (base_file) as RctMetaData; if (null != base_info && 0 == base_info.AddSize && meta.Width == base_info.Width && meta.Height == base_info.Height) { base_info.FileName = name; return ReadPixelsData (base_file, base_info); } } } } catch { /* ignore baseline image read errors */ } return null; }