예제 #1
0
 public void AddHardwareSendPic(string GpsCode, BoShiJiePicture pic)
 {
     lock (HardwareSendPic)
     {
         HardwareSendPic.Add(GpsCode, pic);
         pic.UploadFramesCompleted = new BoShiJiePicture.UploadFramesCompletedHandler(BoShiJiePictures.Instance.UploadFramesCompletedHandler);
     }
 }
예제 #2
0
 /// <summary>
 /// 新增照片接收实体
 /// </summary>
 /// <param name="picture"></param>
 /// <param name="task"></param>
 /// <param name="fragement"></param>
 private void AddPicReciver(BoShiJiePicture picture, TakePicTask task, GPSPictureFragment fragement)
 {
     if (task.TaskType == SimpleCmdType.NormalSeriateShoot)
     {
     }
     else
     {
         picture = new BoShiJiePicture(task.GPSCode, (byte)fragement.FragementCount, (byte)fragement.CameraID, (byte)fragement.Status);
     }
 }
예제 #3
0
        /// <summary>
        /// 写照片文件到指定目录
        /// </summary>
        private void SavePictureInfoToDB(string gpsCode, string httpFileName, BoShiJiePicture picture)
        {
            YouWeiGPSData picture_YouWeiData = new YouWeiGPSData();
            //去掉前缀的GPSCode
            picture_YouWeiData.BaseData.GPSCode = gpsCode.Remove(0, base.CodePrefix.Length);
            picture_YouWeiData.BaseData.PhotoPath = httpFileName;
            picture_YouWeiData.BaseData.IsPhotoData = true;
            picture_YouWeiData.FullGpsCode = gpsCode;

            int photoType = 0;
            switch (picture.TakeKind)
            {
                case 2:
                case 3:
                    //上车拍照或开门拍照
                    photoType = 3;
                    break;
                default:
                    //默认实时拍照
                    photoType = 2;
                    if (PicTaskPool.ContainsKey(gpsCode) && PicTaskPool[gpsCode].Count > 0)
                    {
                        //取出队首的任务
                        TakePicTask task = PicTaskPool[gpsCode].Peek();
                        if (task.TaskType == SimpleCmdType.TimingShoot)
                        {
                            photoType = 1;
                        }
                        else if (task.TaskType == SimpleCmdType.TakePictureForDoorShot)
                        {
                            photoType = 3;
                        }
                    }
                    break;
            }
            picture_YouWeiData.BaseData.ReportTime = DateTime.Now;
            picture_YouWeiData.BaseData.ReceiveTime = DateTime.Now;
            picture_YouWeiData.BaseData.DoorStatus = (picture.TakeKind == 0x02 || picture.TakeKind == 0x03) ? 1 : 0;
            picture_YouWeiData.BaseData.PlunderState = picture.TakeKind == 0x01 ? 0 : 1;
            picture_YouWeiData.BaseData.RealTimePhotoType = photoType;
            picture_YouWeiData.BaseData.CameraId = picture.CameraNo;
            //}

            //StorageService.Store(new List<GPSDataEntity>() { picture_YouWeiData.BaseData }, base.CodePrefix);
            StorageService.GetQueue().Enqueue(picture_YouWeiData.BaseData);
            //向应用层发送图片路径
            TakePictureAckMsg(ref picture_YouWeiData, false, true);
        }
예제 #4
0
        /// <summary>
        /// 处理图像帧
        /// </summary>
        /// <param name="data">帧数据</param>
        private void ProcessPictureFrame(byte[] data)
        {
            GPSPictureFragment fragement = DecodePictureStream(data);
            string strFullGpsCode = base.CodePrefix + fragement.GPSCode;
            Logger.Trace(string.Format("[收到图片数据]CameraNo:{0} FrameCount:{1}/{2} VehicleID:{3}", fragement.CameraID, (int)fragement.WhichFragement, fragement.FragementCount, strFullGpsCode));

            switch (fragement.Status)
            {
                case 1:
                case 2:
                case 3:
                    string strPicType = "";
                    switch (fragement.Status)
                    {
                        case 1:
                            strPicType = "劫警拍照";
                            break;
                        case 2:
                            strPicType = "上车拍照";
                            break;
                        case 3:
                            strPicType = "开门延时拍照";
                            break;

                    }
                    //上车拍照或开门拍照
                    BoShiJiePicture Hardpicture = null;
                    if (!HardwareSendPic.ContainsKey(strFullGpsCode))
                    {
                        Logger.Trace("添加" + strPicType + "接收图片实体,GPScode:" + strFullGpsCode);
                        Hardpicture = new BoShiJiePicture(strFullGpsCode, (byte)fragement.FragementCount, (byte)fragement.CameraID, (byte)fragement.Status);
                        AddHardwareSendPic(strFullGpsCode, Hardpicture);
                    }
                    Hardpicture = HardwareSendPic[strFullGpsCode];
                    Hardpicture.UpdateFrame((byte)fragement.WhichFragement, fragement.Data);
                    break;
                default:
                    if (PicTaskPool[strFullGpsCode].Count <= 0)
                    {
                        return;
                    }
                    TakePicTask task = PicTaskPool[strFullGpsCode].Peek();
                    //当前拍照的摄像头编号和上传数据中的编号是否一致
                    if (task.Status == TakePicTaskStatus.LastPicFinished || task.CameraList[task.CurrentCameraIndex] != fragement.CameraID)
                    {
                        Logger.Trace(string.Format("[补传或已超时照片的数据,抛弃]CameraNo:{0}; VehicleID:{1}", fragement.CameraID, strFullGpsCode));
                        return;
                    }
                    var picture = BoShiJiePictures.Instance[strFullGpsCode];
                    //接收实体不存在
                    if (picture == null)
                    {
                        if (task.CameraList[task.CurrentCameraIndex] == fragement.CameraID)
                        {
                            picture = new BoShiJiePicture(task.GPSCode, (byte)fragement.FragementCount, (byte)fragement.CameraID, (byte)fragement.Status);
                            BoShiJiePictures.Instance.AddPic(picture);
                            Logger.Trace(string.Format("[新增接收照片实体]CameraNo:{0}; VehicleID:{1}", fragement.CameraID, task.GPSCode));
                        }
                        else
                        {
                            Logger.Trace(string.Format("[补传或已超时照片的数据,抛弃]CameraNo:{0}; VehicleID:{1}", fragement.CameraID, strFullGpsCode));
                            return;
                        }
                    }
                    picture.UpdateFrame((byte)fragement.WhichFragement, fragement.Data);
                    break;

            }
        }
예제 #5
0
        //private byte[] CreateTakePhotoCommandStream(string gpsCode,int cameraID)
        //{
        //    byte[] gpsCodeStream=Transfer.TransferGPSCode16ToBytes(GetRawGPSCode(gpsCode));
        //    byte crc =(byte)( 0x28 ^ 0x08 ^ gpsCodeStream[0] ^ gpsCodeStream[1] ^ gpsCodeStream[2] ^ gpsCodeStream[3] ^ gpsCodeStream[4] ^ (byte)cameraID);

        //    return new byte[] { 0x29, 0x29, 0x28, 0x00, 0x08, gpsCodeStream[0], gpsCodeStream[1], gpsCodeStream[2], gpsCodeStream[3], (byte)cameraID, crc, 0x0D };
        //}
        /// <summary>
        /// 将拍照数据写成图片文件
        /// </summary>
        internal void WritePicFile(BoShiJiePicture picture)
        {

            //图片存放目录名
            string folderName = DateTime.Now.ToString("yyyMMdd");

            //图片存放文件名
            string picFileName = DateTime.Now.ToString("yyyyMMddHHmmss");

            //web端查询图片目录
            string httpFileName = folderName;

            int nIndex = PhotoPath.IndexOf("|");

            string strShortGpsCode = picture.VehicleID.Remove(0, base.CodePrefix.Length);
            string folder = PhotoPath.Substring(0, nIndex) + "\\" + strShortGpsCode + "\\" + folderName;

            FileStream stream = null;

            if (Directory.Exists(folder) == false)
            {
                Directory.CreateDirectory(folder);
            }

            try
            {
                string picFileExtension = ".jpg";

                string DistFileName = folder + "\\" + picFileName + "_" + picture.CameraNo.ToString() + picFileExtension;
                stream = new FileStream(DistFileName, FileMode.Append);
                httpFileName += "/" + picFileName + "_" + picture.CameraNo.ToString() + picFileExtension;


                for (int i = 1; i <= picture.Frames.Count; i++)
                {
                    var frame = picture.Frames[(byte)i];
                    stream.Write(frame, 0, frame.Length);
                }

                stream.Close();

                try
                {
                    Bitmap bmp = new Bitmap(DistFileName);
                }
                catch (Exception ex)
                {
                    Logger.Error("图片无法显示,不保存到数据库");
                    return;
                }

                //MemoryStream ms = new MemoryStream();
                //for (int i = 1; i <= picture.Frames.Count; i++)
                //{
                //    var frame = picture.Frames[(byte)i];
                //    ms.Write(frame, 0, frame.Length);
                //}
                //System.Drawing.Image image = System.Drawing.Image.FromStream(ms);
                //image.Save("c:\\bsj" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg");


                //将图片路径存入数据库
                SavePictureInfoToDB(picture.VehicleID, httpFileName, picture);

                Logger.Trace("GpsBoShiJie--Gps:" + picture.VehicleID + " Saved picture", null);
            }
            catch (Exception ex)
            {
                Logger.Error("GpsBoShiJie.BoShiJieDataParser.writePicFile:" + ex.ToString(), null);
            }
        }