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.
457 lines
14 KiB
457 lines
14 KiB
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 |
|
} |
|
}
|
|
|