Exemple #1
0
        //------------------------------------------------------------------------------

        protected void ReadHeader(BinaryReader r)
        {
            // signature

            Images.Version = new string(r.ReadChars(6));

            if (Images.Version != "GIF87a" && Images.Version != "GIF89a")
            {
                throw new Exception("Unsupported GIF version");
            }

            // read header

            Images.Width  = r.ReadUInt16();
            Images.Height = r.ReadUInt16();
            ImageFlags    = (ImageFlag)r.ReadByte();
            var bgIndex = r.ReadByte();

            r.ReadByte(); // aspect ratio

            Images.BitDepth = (int)(ImageFlags & ImageFlag.BitDepthMask) >> 4 + 1;

            if ((ImageFlags & ImageFlag.ColourTable) == ImageFlag.ColourTable)
            {
                GlobalColourTable = ReadColourTable(ImageFlags, r);

                if (bgIndex < GlobalColourTable.Length)
                {
                    BackgroundColour = GlobalColourTable[bgIndex];
                }
            }
        }
 public VerifyResult()
 {
     Key       = "";
     ErrorCode = 0;
     AnnexData = "";
     Flags     = new ImageFlag();
 }
Exemple #3
0
        /// <summary>
        /// 在图片上绘制标记
        /// </summary>
        /// <param name="flag"></param>
        private void DrawFlag(ImageFlag flag)
        {
            this.Invoke(new MethodInvoker(delegate()
            {
                Image img = null;
                if (pic1.Image != null)
                {
                    img = pic1.Image.Clone() as Image;
                }
                if (img != null)
                {
                    Pen pen    = new Pen(Color.Blue, 2.0f);
                    Graphics g = Graphics.FromImage(img);

                    for (int i = 0; i < flag.targets.Count; i++)
                    {
                        Flag flagInfo = flag.targets[i];
                        //绘制检测类型
                        g.DrawString(flagInfo.label + "[" + flagInfo.conf + "]", new Font("宋体", 14f, FontStyle.Bold), Brushes.Red, flagInfo.x, flagInfo.y - 20);
                        //绘制目标框
                        g.DrawRectangle(pen, flagInfo.x, flagInfo.y, flagInfo.w, flagInfo.h);
                    }
                    pic2.Image = img;
                }
            }));
        }
Exemple #4
0
 private VerifyResult PostImage2(string guid)
 {
     if (string.IsNullOrWhiteSpace(guid))
     {
         guid = Guid.NewGuid().ToString();
     }
     try
     {
         VerifyResult result = verProcess.VerifyImage(urlTmp, guid, imgData2);
         ImageFlag    flag   = null;
         if (result != null)
         {
             flag = result.Flags;
         }
         if (flag != null && flag.targets != null)
         {
             DrawFlag(flag);
         }
         return(result);
     }
     catch (Exception exp)
     {
         Logger.AddLog(this.GetType(), "PostImage2", "", exp);
         return(null);
     }
     finally
     {
     }
 }
Exemple #5
0
        //------------------------------------------------------------------------------

        Color32[] ReadColourTable(Color32[] colourTable, ImageFlag flags)
        {
            var tableSize = Pow2[(int)(flags & ImageFlag.TableSizeMask) + 1];

            for (var i = 0; i < tableSize; i++)
            {
                colourTable[i] = new Color32(
                    Input[D++],
                    Input[D++],
                    Input[D++],
                    0xFF
                    );
            }

            return(colourTable);
        }
Exemple #6
0
        //------------------------------------------------------------------------------

        private Color32[] ReadColourTable(ImageFlag flags, BinaryReader r)
        {
            var tableSize   = (int)Math.Pow(2, (int)(flags & ImageFlag.TableSizeMask) + 1);
            var colourTable = new Color32[tableSize];

            for (var i = 0; i < tableSize; i++)
            {
                colourTable[i] = new Color32(
                    r.ReadByte(),
                    r.ReadByte(),
                    r.ReadByte(),
                    0xFF
                    );
            }

            return(colourTable);
        }
Exemple #7
0
        private void PostImage()
        {
            try
            {
                string filePath = "";
                string url      = "";
                this.Invoke(new MethodInvoker(delegate()
                {
                    filePath           = txtPicPath.Text;
                    url                = txtUrl.Text;
                    btnExecute.Enabled = false;
                }));

                if (!File.Exists(filePath))
                {
                    return;
                }
                var          fileName = filePath.Substring(filePath.LastIndexOf("\\") + 1);
                byte[]       imgData  = File.ReadAllBytes(filePath);
                VerifyResult result   = verProcess.VerifyImage(txtUrl.Text, fileName, imgData);
                ImageFlag    flag     = null;
                if (result != null)
                {
                    flag = result.Flags;
                }

                if (flag != null && flag.targets != null)
                {
                    DrawFlag(flag);
                }
            }
            catch (Exception exp)
            {
                Logger.AddLog(this.GetType(), "PostImage", "", exp);
            }
            finally
            {
                this.Invoke(new MethodInvoker(delegate()
                {
                    btnExecute.Enabled = true;
                }));
            }
        }
Exemple #8
0
        //------------------------------------------------------------------------------

        protected void ReadImageBlock(BinaryReader r)
        {
            // read image block header

            ImageLeft       = r.ReadUInt16();
            ImageTop        = r.ReadUInt16();
            ImageWidth      = r.ReadUInt16();
            ImageHeight     = r.ReadUInt16();
            ImageFlags      = (ImageFlag)r.ReadByte();
            ImageInterlaced = (ImageFlags & ImageFlag.Interlaced) == ImageFlag.Interlaced;

            if (ImageWidth == 0 || ImageHeight == 0)
            {
                return;
            }

            if ((ImageFlags & ImageFlag.ColourTable) == ImageFlag.ColourTable)
            {
                ActiveColourTable = ReadColourTable(ImageFlags, r);
            }
            else
            {
                ActiveColourTable = GlobalColourTable;
            }

            LzwMinimumCodeSize = r.ReadByte();


            // compressed image data

            var lzwData = ReadImageBlocks(r);


            // this disposal method determines whether we start with a previous image

            OutputBuffer = null;

            switch (ControlDispose)
            {
            case Disposal.None:
            case Disposal.DoNotDispose:
            {
                var prev = Images.Images.Count > 0 ? Images.Images[Images.Images.Count - 1] : null;

                if (prev != null && prev.RawImage != null)
                {
                    OutputBuffer = prev.RawImage.Clone() as Color32[];
                }
            }
            break;


            case Disposal.ReturnToPrevious:

                for (int i = Images.Images.Count - 1; i >= 0; i--)
                {
                    var prev = Images.Images[i];

                    if (prev.DisposalMethod == Disposal.None || prev.DisposalMethod == Disposal.DoNotDispose)
                    {
                        OutputBuffer = prev.RawImage.Clone() as Color32[];
                        break;
                    }
                }

                break;

            case Disposal.RestoreBackground:
            default:
                break;
            }

            if (OutputBuffer == null)
            {
                var size = Images.Width * Images.Height;

                OutputBuffer = new Color32[size];

                for (int i = 0; i < size; i++)
                {
                    OutputBuffer[i] = ClearColour;
                }
            }

            // create image

            var img = new Image(Images);

            img.Delay          = ControlDelay * 10; // (gif are in 1/100th second) convert to ms
            img.DisposalMethod = ControlDispose;

            //var sw = new Stopwatch(); sw.Start();
            img.RawImage = DecompressLZW(lzwData);
            //sw.Stop(); UnityEngine.Debug.Log( $"{sw.ElapsedTicks} ticks, {sw.ElapsedMilliseconds}ms" );

            if (ImageInterlaced)
            {
                img.RawImage = Deinterlace(img.RawImage, ImageWidth);
            }

            Images.Add(img);
        }
Exemple #9
0
 public static unsafe extern void vlImageSetFlag(ImageFlag imageFlag, [MarshalAs(UnmanagedType.U1)]bool bState);
Exemple #10
0
 public static unsafe extern bool vlImageGetFlag(ImageFlag imageFlag);
Exemple #11
0
 public static unsafe extern void vlImageSetFlag(ImageFlag ImageFlag, bool bState);
Exemple #12
0
 public unsafe static extern bool vlImageGetFlag(ImageFlag ImageFlag);
Exemple #13
0
 public unsafe static void vlImageSetFlag(ImageFlag ImageFlag, bool bState)
 {
     if (IsWow64()) x64.vlImageSetFlag(ImageFlag, bState); else x86.vlImageSetFlag(ImageFlag, bState);
 }
Exemple #14
0
 public unsafe static bool vlImageGetFlag(ImageFlag ImageFlag)
 {
     return IsWow64() ? x64.vlImageGetFlag(ImageFlag) : x86.vlImageGetFlag(ImageFlag);
 }