void ReadBaseImage() { try { string dir_name = VFS.GetDirectoryName(m_info.FileName); string base_name = Path.ChangeExtension(m_info.BaseName, "qnt"); base_name = VFS.CombinePath(dir_name, base_name); using (var base_file = VFS.OpenBinaryStream(base_name)) { var base_info = Qnt.ReadMetaData(base_file) as QntMetaData; if (null != base_info && m_info.Width == base_info.Width && m_info.Height == base_info.Height) { base_info.FileName = base_name; var reader = new QntFormat.Reader(base_file.AsStream, base_info); reader.Unpack(); m_base_bpp = reader.BPP; m_base = reader.Data; } } } catch (Exception X) { Trace.WriteLine(X.Message, "[DCF]"); } }
public void Unpack() { long next_pos = m_info.DataOffset; for (;;) { m_input.Position = next_pos; uint id = m_input.ReadUInt32(); next_pos += 8 + m_input.ReadUInt32(); if (0x6C646664 == id) // 'dfdl' { int unpacked_size = m_input.ReadInt32(); if (unpacked_size <= 0) { continue; } m_mask = new byte[unpacked_size]; using (var input = new ZLibStream(m_input.AsStream, CompressionMode.Decompress, true)) input.Read(m_mask, 0, unpacked_size); } else if (0x64676364 == id) // 'dcgd' { break; } } long qnt_pos = m_input.Position; if (m_input.ReadUInt32() != Qnt.Signature) { throw new InvalidFormatException(); } using (var reg = new StreamRegion(m_input.AsStream, qnt_pos, true)) using (var qnt = new BinaryStream(reg, m_input.Name)) { var qnt_info = Qnt.ReadMetaData(qnt) as QntMetaData; if (null == qnt_info) { throw new InvalidFormatException(); } var overlay = new QntFormat.Reader(reg, qnt_info); overlay.Unpack(); m_overlay_bpp = overlay.BPP; if (m_mask != null) { ReadBaseImage(); } if (m_base != null) { m_output = ApplyOverlay(overlay.Data); SetFormat((int)m_info.Width, m_overlay_bpp); } else { m_output = overlay.Data; SetFormat((int)qnt_info.Width, m_overlay_bpp); } } }
public static QntHeader LoadQntHeader(Stream stream) { var qntHeader = Qnt.GetQntHeader(stream); if (qntHeader == null || !qntHeader.Validate()) { return(null); } return(qntHeader); }
/// <summary> /// Método implementado da interface IEntity, retorna um dictionary de chave valor de nome do atributo e seu valor /// </summary> /// <returns></returns> public Dictionary <string, string> Properties() { Dictionary <String, String> properties = new Dictionary <string, string>(); properties.Add("id", Id.ToString()); properties.Add("desc", Desc); properties.Add("qnt", Qnt.ToString()); properties.Add("preco", Preco.ToString()); return(properties); }
public static FreeImageBitmap LoadQnt(byte[] bytes) { if (bytes == null) { return(null); } try { return(Qnt.LoadImage(bytes)); } catch { return(null); } }
public static void SaveQnt(Stream stream, FreeImageBitmap bitmap) { Qnt.SaveImage(stream, bitmap); }