예제 #1
0
            ///////////////////////////////////////////////////////////////////////////

            public void Save(BinaryReverseWriter writer)
            {
                Debug.WriteLine("BlendingRanges Save started at " + writer.BaseStream.Position.ToString());

                writer.Write((uint)m_data.Length);
                writer.Write(m_data);
            }
예제 #2
0
            ///////////////////////////////////////////////////////////////////////////

            public void Save(BinaryReverseWriter writer)
            {
                Debug.WriteLine("Mask Save started at " + writer.BaseStream.Position.ToString());

                if (m_rect.IsEmpty)
                {
                    writer.Write((uint)0);
                    return;
                }

                using (new LengthWriter(writer))
                {
                    writer.Write(m_rect.Top);
                    writer.Write(m_rect.Left);
                    writer.Write(m_rect.Bottom);
                    writer.Write(m_rect.Right);

                    writer.Write(m_defaultColor);

                    writer.Write((byte)m_flags.Data);

                    // padding 2 bytes so that size is 20
                    writer.Write((int)0);
                }
            }
예제 #3
0
            internal void SavePixelData(BinaryReverseWriter writer)
            {
                Debug.WriteLine("Channel SavePixelData started at " + writer.BaseStream.Position.ToString());

                writer.Write((short)m_imageCompression);
                writer.Write(m_imageData);
            }
예제 #4
0
        ///////////////////////////////////////////////////////////////////////////

        public void Save(BinaryReverseWriter writer)
        {
            Debug.WriteLine("Layer Save started at " + writer.BaseStream.Position.ToString());

            writer.Write(m_rect.Top);
            writer.Write(m_rect.Left);
            writer.Write(m_rect.Bottom);
            writer.Write(m_rect.Right);

            //-----------------------------------------------------------------------

            writer.Write((short)m_channels.Count);
            foreach (Channel ch in m_channels)
            {
                ch.Save(writer);
            }

            //-----------------------------------------------------------------------

            string signature = "8BIM";

            writer.Write(signature.ToCharArray());
            writer.Write(m_blendModeKey.ToCharArray());
            writer.Write(m_opacity);
            writer.Write((byte)(m_clipping ? 1 : 0));

            writer.Write((byte)m_flags.Data);

            //-----------------------------------------------------------------------

            writer.Write((byte)0);

            //-----------------------------------------------------------------------

            using (new LengthWriter(writer))
            {
                m_maskData.Save(writer);
                m_blendingRangesData.Save(writer);

                long namePosition = writer.BaseStream.Position;

                writer.WritePascalString(m_name);

                int paddingBytes = (int)((writer.BaseStream.Position - namePosition) % 4);
                Debug.Print("Layer {0} write padding bytes after name", paddingBytes);

                for (int i = 0; i < paddingBytes; i++)
                {
                    writer.Write((byte)0);
                }

                foreach (AdjusmentLayerInfo info in m_adjustmentInfo)
                {
                    info.Save(writer);
                }
            }
        }
예제 #5
0
            internal void Save(BinaryReverseWriter writer)
            {
                Debug.WriteLine("Channel Save started at " + writer.BaseStream.Position.ToString());

                writer.Write(m_id);

                CompressImageData();

                writer.Write(Data.Length + 2); // 2 bytes for the image compression
            }
예제 #6
0
            public void Save(BinaryReverseWriter writer)
            {
                Debug.WriteLine("AdjusmentLayerInfo Save started at " + writer.BaseStream.Position.ToString());

                string signature = "8BIM";

                writer.Write(signature.ToCharArray());
                writer.Write(m_key.ToCharArray());
                writer.Write((uint)m_data.Length);
                writer.Write(m_data);
            }
        public LengthWriter(BinaryReverseWriter writer)
        {
            m_writer = writer;

            // we will write the correct length later, so remember
            // the position
            m_lengthPosition = m_writer.BaseStream.Position;
            m_writer.Write((uint)0xFEEDFEED);

            // remember the start  position for calculation Image
            // resources length
            m_startPosition = m_writer.BaseStream.Position;
        }
        protected override void StoreData()
        {
            System.IO.MemoryStream stream = new System.IO.MemoryStream();
            BinaryReverseWriter    writer = new BinaryReverseWriter(stream);

            foreach (string name in m_channelNames)
            {
                writer.Write((byte)name.Length);
                writer.Write(name.ToCharArray());
            }

            writer.Close();
            stream.Close();

            Data = stream.ToArray();
        }
예제 #9
0
        protected override void StoreData()
        {
            System.IO.MemoryStream stream = new System.IO.MemoryStream();
            BinaryReverseWriter    writer = new BinaryReverseWriter(stream);

            writer.Write((Int16)m_hRes);
            writer.Write((Int32)m_hResUnit);
            writer.Write((Int16)m_widthUnit);

            writer.Write((Int16)m_vRes);
            writer.Write((Int32)m_vResUnit);
            writer.Write((Int16)m_heightUnit);

            writer.Close();
            stream.Close();

            Data = stream.ToArray();
        }
        //////////////////////////////////////////////////////////////////

        public void Save(BinaryReverseWriter writer)
        {
            StoreData();

            if (m_osType == String.Empty)
            {
                m_osType = "8BIM";
            }

            writer.Write(m_osType.ToCharArray());
            writer.Write(m_id);

            writer.WritePascalString(m_name);

            writer.Write((int)m_data.Length);
            writer.Write(m_data);

            if (writer.BaseStream.Position % 2 == 1)
            {
                writer.Write((byte)0);
            }
        }
예제 #11
0
 internal void SavePixelData(BinaryReverseWriter writer)
 {
     //writer.Write(m_data);
 }
예제 #12
0
            private void CompressImageData()
            {
                if (m_imageCompression == ImageCompression.Rle)
                {
                    MemoryStream        dataStream = new MemoryStream();
                    BinaryReverseWriter writer     = new BinaryReverseWriter(dataStream);

                    // we will write the correct lengths later, so remember
                    // the position
                    long lengthPosition = writer.BaseStream.Position;

                    int[] rleRowLenghs = new int[m_layer.m_rect.Height];

                    if (m_imageCompression == ImageCompression.Rle)
                    {
                        for (int i = 0; i < rleRowLenghs.Length; i++)
                        {
                            writer.Write((short)0x1234);
                        }
                    }

                    //---------------------------------------------------------------

                    int bytesPerRow = 0;

                    switch (m_layer.PsdFile.Depth)
                    {
                    case 1:
                        bytesPerRow = m_layer.m_rect.Width;    //NOT Shure
                        break;

                    case 8:
                        bytesPerRow = m_layer.m_rect.Width;
                        break;

                    case 16:
                        bytesPerRow = m_layer.m_rect.Width * 2;
                        break;
                    }

                    //---------------------------------------------------------------

                    for (int row = 0; row < m_layer.m_rect.Height; row++)
                    {
                        int rowIndex = row * m_layer.m_rect.Width;
                        rleRowLenghs[row] = RleHelper.EncodedRow(writer.BaseStream, m_imageData, rowIndex, bytesPerRow);
                    }

                    //---------------------------------------------------------------

                    long endPosition = writer.BaseStream.Position;

                    writer.BaseStream.Position = lengthPosition;

                    for (int i = 0; i < rleRowLenghs.Length; i++)
                    {
                        writer.Write((short)rleRowLenghs[i]);
                    }

                    writer.BaseStream.Position = endPosition;

                    dataStream.Close();

                    m_data = dataStream.ToArray();

                    dataStream.Dispose();
                }
                else
                {
                    m_data = (byte[])m_imageData.Clone();
                }
            }