Пример #1
0
 private void _read()
 {
     _magic = m_io.ReadBytes(8);
     if (!((KaitaiStream.ByteArrayCompare(Magic, new byte[] { 65, 78, 68, 82, 79, 73, 68, 33 }) == 0)))
     {
         throw new ValidationNotEqualError(new byte[] { 65, 78, 68, 82, 79, 73, 68, 33 }, Magic, M_Io, "/seq/0");
     }
     _kernel        = new Load(m_io, this, m_root);
     _ramdisk       = new Load(m_io, this, m_root);
     _second        = new Load(m_io, this, m_root);
     _tagsLoad      = m_io.ReadU4le();
     _pageSize      = m_io.ReadU4le();
     _headerVersion = m_io.ReadU4le();
     _osVersion     = new OsVersion(m_io, this, m_root);
     _name          = System.Text.Encoding.GetEncoding("ASCII").GetString(KaitaiStream.BytesTerminate(m_io.ReadBytes(16), 0, false));
     _cmdline       = System.Text.Encoding.GetEncoding("ASCII").GetString(KaitaiStream.BytesTerminate(m_io.ReadBytes(512), 0, false));
     _sha           = m_io.ReadBytes(32);
     _extraCmdline  = System.Text.Encoding.GetEncoding("ASCII").GetString(KaitaiStream.BytesTerminate(m_io.ReadBytes(1024), 0, false));
     if (HeaderVersion > 0)
     {
         _recoveryDtbo = new SizeOffset(m_io, this, m_root);
     }
     if (HeaderVersion > 0)
     {
         _bootHeaderSize = m_io.ReadU4le();
     }
     if (HeaderVersion > 1)
     {
         _dtb = new LoadLong(m_io, this, m_root);
     }
 }
Пример #2
0
        protected override IEnumerator ProcessPayload(VisualPayload payload)
        {
            var filesize = FileSize.GetFirstValue(payload.Data);

            var significantStream = SignificantBitstream
                                    .GetFirstValue(payload.Data);
            var insignificantStream = InsignificantBitStream
                                      .GetFirstValue(payload.Data);

            var sizeOffset = SizeOffset.GetFirstValue(payload.Data);

            var csView = Assembler.ConstructCsViewStep1(significantStream,
                                                        insignificantStream, filesize, sizeOffset /* * filesize/700000*/);

            csView.Initialize(this, payload);

            csView.SetTexture(VisualizerTexture.GetFirstValue(payload.Data));

            CsVisualizerTarget.SetValue(new CsVisContainer(csView), payload.Data);

            var newPayload = new VisualPayload(payload.Data, new VisualDescription(csView.Bound));

            var iterator = Router.TransmitAll(newPayload);

            while (iterator.MoveNext())
            {
                yield return(null);
            }
        }
Пример #3
0
        public Image GetPartialImage(Image image, SizeOffset sizeOffset)
        {
            Bitmap    original = new Bitmap(image);
            Rectangle srcRect  = new Rectangle(
                sizeOffset.OffsetX,
                sizeOffset.OffsetY,
                sizeOffset.SizeX,
                sizeOffset.SizeY);

            return(sizeOffset.SizeX == 0 || sizeOffset.SizeY == 0 ?
                   null : original.Clone(srcRect, original.PixelFormat));
        }
Пример #4
0
        public SizeOffset GetChanges(Image newImage)
        {
            var newImageBmp = new Bitmap(newImage);
            var x           = newImage.Width;
            var y           = newImage.Height;
            var result      = new SizeOffset()
            {
                OffsetX = x,
                OffsetY = y,
                SizeX   = 0,
                SizeY   = 0
            };
            var isChanged = false;

            if (oldImage != null)
            {
                for (int i = 0; i < x; i++)
                {
                    for (int j = 0; j < y; j++)
                    {
                        Color a = oldImage.GetPixel(i, j);
                        Color b = newImageBmp.GetPixel(i, j);
                        if (!isColorEqual(a, b))
                        {
                            isChanged      = true;
                            result.OffsetX = i > result.OffsetX ? i : result.OffsetX;
                            result.OffsetY = j > result.OffsetY ? j : result.OffsetY;
                            result.SizeX   = i < result.SizeX ? i : result.SizeX;
                            result.SizeY   = j < result.SizeY ? j : result.SizeY;
                        }
                    }
                }
            }

            oldImage = newImageBmp;
            return(isChanged ? result : new SizeOffset()
            {
                OffsetX = 0,
                OffsetY = 0,
                SizeX = x,
                SizeY = y
            });
        }