年度变更建库软件5.0版本
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

458 lines
14 KiB

4 months ago
using Newtonsoft.Json.Linq;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace Kingo.PluginServiceInterface.Model
{
public class PhotoInfo : INotifyPropertyChanged
{
public PhotoInfo()
{
checkedVisibility = Visibility.Visible;
isChecked = false;
}
public int IsChecked { get; set; } = 1;
public string FID { get; set; }
public int BSM { get; set; }
public string HCJLBSM { get; set; }
public string TBBH { get; set; }
public string TCBM { get; set; }
public string FJLX { get; set; }
public int MODE { get; set; }
public string FJMC { get; set; }
public double ZBX { get; set; }
public double ZBY { get; set; }
public double XZB { get; set; }
public double YZB { get; set; }
public double MaxX { get; set; }
public double MinX { get; set; }
public double MinY { get; set; }
public double MaxY { get; set; }
public int WKID { get; set; }
public string ARG { get; set; }
private byte[] _arg4;
public byte[] ARG4
{
get { return _arg4; }
set
{
_arg4 = value;
this.FJ = _arg4;
}
}
public byte[] FJ { get; set; }
public double PSJD { get; set; }
public double PSGD { get; set; }
public string PSSJ { get; set; }
public string JZRY { get; set; }
private string _cjsj;
public string CJSJ
{
get
{
return _cjsj;
}
set
{
_cjsj = value;
this.PSSJ = _cjsj;
}
}
public double Longitude { get; set; }
public double Latitude { get; set; }
public string TBYBH { get; set; }
private string jsonStr { get; set; }
public string POINTS_JSON
{
get { return jsonStr; }
set
{
try
{
jsonStr = value;
if (string.IsNullOrWhiteSpace(jsonStr))
{
KGIS.Framework.Utils.LogAPI.Debug("照片ARG:" + this.ARG + " Points_json为空!");
return;
}
var jObjectStr = JArray.Parse(jsonStr);
if (jObjectStr != null && jObjectStr.Count > 0)
{
var jObject = jObjectStr[0];
if (jObject["x"] != null && !string.IsNullOrWhiteSpace(jObject["x"].ToString()))//X坐标
{
this.XZB = double.Parse(jObject["x"].ToString());
}
if (jObject["y"] != null && !string.IsNullOrWhiteSpace(jObject["y"].ToString()))//Y坐标
{
this.YZB = double.Parse(jObject["y"].ToString());
}
double yaw = 0.0;
if (jObject["yaw"] != null && !string.IsNullOrWhiteSpace(jObject["yaw"].ToString()))//手机围绕Z轴翻转角度
{
yaw = double.Parse(jObject["yaw"].ToString());
}
double roll = 0.0;
if (jObject["roll"] != null && !string.IsNullOrWhiteSpace(jObject["roll"].ToString()))//围绕X轴左右翻转角度
{
roll = double.Parse(jObject["roll"].ToString());
}
this.PSJD = (yaw - roll + 360) % 360;
}
}
catch (Exception ex)
{
KGIS.Framework.Utils.LogAPI.Debug("举证照片POINTS_JSON解析异常:" + ex.Message);
}
}
}
public string GROUPCODE { get; set; }
public string GROUP_NAME_USER { get; set; }
/// <summary>
/// hcdb路径
/// </summary>
public string hcdbpath { get; set; }
/// <summary>
/// 是否是正射照片
/// </summary>
public bool IsZS { get; set; }
/// <summary>
/// 是否是无人机
/// </summary>
public bool IsWRJ { get; set; }
/// <summary>
/// 图片所属表(用于删除图片)
/// </summary>
public string ImageType { get; set; }
public object Tag { get; set; }
private string imagePath = null;
//{ return string.Format(@"{0}\举证成果\附件\{1}\{2}", Path.GetDirectoryName(Env.Instance.ProjectPath), TBYBH , FJMC); }
public string ImagePath { get { return imagePath; } set { imagePath = value; } }
public double Angle { get; set; }
public string HCRY { get; set; }
public int SFXZ { get; set; }
private Visibility checkedVisibility;
/// <summary>
/// 选择复选框显示属性
/// </summary>
public Visibility CheckedVisibility
{
get { return checkedVisibility; }
set
{
checkedVisibility = value;
PropertyChangedByname("CheckedVisibility");
}
}
private bool isChecked = true;
/// <summary>
/// 是否选中
/// </summary>
public bool isSelected
{
get { return isChecked; }
set
{
isChecked = value;
PropertyChangedByname("isSelected");
}
}
private ImageSource imageSource;
/// <summary>
/// 图片数据源
/// </summary>
public ImageSource ImageSource
{
get
{
return imageSource;
}
set
{
imageSource = value;
PropertyChangedByname("ImageSource");
}
}
private string imglocalpath;
/// <summary>
/// 图片相对地址(保存本地时需要)如果为空,则随机生成
/// </summary>
public string ImgLocalPath
{
get
{
if (string.IsNullOrEmpty(imglocalpath))
{
return Guid.NewGuid().ToString();
}
return imglocalpath;
}
set { imglocalpath = value; }
}
private string localpath;
/// <summary>
/// 获取图片本地地址
/// </summary>
public string LocalPath
{
get
{
//return string.Format(@"{0}\外业调查结果\图片\{1}\{2}", Path.GetDirectoryName(KGIS.Framework.Platform.Platform.Instance.GetProjectInfo().GetProjDBPath()), TBBH.Substring(0, 2), FJMC);
return "";
}
set { localpath = value; }
}
/// <summary>
/// 根据网络路径更新图片
/// </summary>
public void UpdateSource()
{
if (string.IsNullOrEmpty(sourceurl))
{
SetImageSource(null);
return;
}
GetPhotoInfo(SourceURL);
}
/// <summary>
/// 异步获取图片
/// </summary>
/// <param name="aPhotoUrl"></param>
private void GetPhotoInfo(string aPhotoUrl)
{
//如果是HTTP下载文件
WebClient client = new WebClient();
client.DownloadDataCompleted += client_DownloadDataCompleted;
client.DownloadDataAsync(new Uri(aPhotoUrl));
}
void client_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
try
{
if (e.Error != null || e.Result == null || e.Result.Count() == 0)
{
SetImageSource(null);
return;
}
SetImageSource(e.Result);
}
catch (Exception)
{
}
}
private void SetImageSource(byte[] ImgResult)
{
if (ImgResult == null || ImgResult.Length == 0)
{
isNoimg = true;
//ImageSource = new BitmapImage(new Uri("/Kingo.ImgDisplayControl;component/Images/zwtp.png", UriKind.RelativeOrAbsolute));
return;
}
SaveFile(ImgResult);
}
public void SaveFile(byte[] filebyte = null)
{
try
{
string basepath = ImagePath;
string dirpath = basepath.Substring(0, basepath.LastIndexOf('\\'));
if (!Directory.Exists(dirpath))
{
Directory.CreateDirectory(dirpath);
}
if (filebyte == null)
filebyte = ImageToByte(imageSource);
File.WriteAllBytes(basepath, filebyte);
}
catch (Exception)
{
if (filebyte == null)
return;
using (var ms = new MemoryStream(filebyte))
{
BitmapImage image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.StreamSource = ms;
image.EndInit();
ImageSource = image;
ms.Dispose();
}
}
}
private bool isNoimg;
/// <summary>
/// 是否无图片
/// </summary>
public bool IsNoimg
{
get { return isNoimg; }
}
private string sourceurl;
/// <summary>
/// 图片网络地址
/// </summary>
public string SourceURL
{
get { return sourceurl + "?s=" + Guid.NewGuid(); }
set { sourceurl = value; }
}
private void PropertyChangedByname(string pname)
{
if (PropertyChanged != null)
{
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs(pname));
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void RotateImg(double angle)
{
try
{
TransformedBitmap tb = new TransformedBitmap();
tb.BeginInit();
//BitmapSource bs = (BitmapSource)ImageSource;//图片源
tb.Source = (BitmapSource)ImageSource;
RotateTransform transform = new RotateTransform(angle);
tb.Transform = transform;
tb.EndInit();
ImageSource = tb;
//TransformedBitmap tb = new TransformedBitmap();
//tb.BeginInit();
//BitmapSource bs = (BitmapSource)ImageSource;//图片源
//tb.Source = bs;
//RotateTransform transform = new RotateTransform(angle);
//tb.Transform = transform;
//tb.EndInit();
//ImageSource = tb;
//if (File.Exists(ImagePath))
//{
// byte[] bb = ImageToByte(bs);
// File.WriteAllBytes(ImagePath, bb);//选择后保存本地路径
// ImageSource = tb;
//}
}
catch
{
}
}
/// <summary>
/// 根据文件扩展名获取图片编码器
/// </summary>
/// <param name="filePath">文件路径</param>
/// <returns>图片编码器</returns>
private BitmapEncoder GetBitmapEncoder(string filePath)
{
var extName = Path.GetExtension(filePath).ToLower();
if (extName.Equals(".png"))
{
return new PngBitmapEncoder();
}
else
{
return new JpegBitmapEncoder();
}
}
#region 旋转图片处理方法
private byte[] ImageToByte(ImageSource imgsource)
{
BitmapSource s = imgsource as BitmapSource;
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(s.PixelWidth, s.PixelHeight, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
System.Drawing.Imaging.BitmapData data = bmp.LockBits(new System.Drawing.Rectangle(System.Drawing.Point.Empty, bmp.Size), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
s.CopyPixels(Int32Rect.Empty, data.Scan0, data.Height * data.Stride, data.Stride);
bmp.UnlockBits(data);
byte[] bb = Bitmap2Byte(bmp);
return bb;
}
private byte[] BitmapToBytes(Bitmap Bitmap)
{
MemoryStream ms = null;
try
{
ms = new MemoryStream();
Bitmap.Save(ms, Bitmap.RawFormat);
byte[] byteImage = new Byte[ms.Length];
byteImage = ms.ToArray();
return byteImage;
}
catch (ArgumentNullException ex)
{
throw ex;
}
finally
{
ms.Close();
}
}
private byte[] Bitmap2Byte(Bitmap bitmap)
{
using (MemoryStream stream = new MemoryStream())
{
bitmap.Save(stream, ImageFormat.Jpeg);
byte[] data = new byte[stream.Length];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(data, 0, Convert.ToInt32(stream.Length));
return data;
}
}
#endregion
}
}