public string Execute(FileItem item, string infile, string dest, ValuePairEnumerator configData) { var conf = new ChromakeyViewModel(configData); dest = Path.Combine(Path.GetDirectoryName(dest), Path.GetFileNameWithoutExtension(dest) + ".jpg"); KalikoImage image = new KalikoImage(infile); var x = (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString(conf.BackgroundColor); var filter = new ChromaKeyFilter(); filter.KeyColor = Color.FromArgb(x.R, x.G, x.B); filter.ToleranceHue = conf.Hue; filter.ToleranceSaturnation = conf.Saturnation/100f; filter.ToleranceBrightness = conf.Brigthness / 100f; image.ApplyFilter(filter); var res = image.Clone(); if (conf.UnsharpMask) res.ApplyFilter(new UnsharpMaskFilter(1.4f, 1.32f, 5)); var backdrop = new KalikoImage(conf.BackgroundFile); backdrop = backdrop.Scale(new FitScaling(image.Width, image.Height)); backdrop.BlitImage(res); backdrop.SaveJpg(dest, 90); return dest; }
public string Execute(FileItem item, string infile, string dest, ValuePairEnumerator configData) { var conf = new RotateTransformViewModel(configData); // Read from file using (MagickImage image = new MagickImage(infile)) { image.BackgroundColor = new MagickColor(Color.Black); if (conf.AutoRotate) { ExifProfile profile = image.GetExifProfile(); image.AutoOrient(); profile.SetValue(ExifTag.Orientation, (UInt16)0); } if (conf.Angle > 0) image.Rotate(conf.Angle); if(conf.FlipHorizontal) image.Flop(); if (conf.FlipVertical) image.Flip(); image.Format = MagickFormat.Jpeg; // Save the result image.Write(dest); } return dest; }
public string Execute(FileItem item, string infile, string dest, ValuePairEnumerator configData) { var conf = new CropTransformViewModel(configData); using (MagickImage image = new MagickImage(infile)) { if (conf.FromLiveView && ServiceProvider.DeviceManager.SelectedCameraDevice != null) { var prop = ServiceProvider.DeviceManager.SelectedCameraDevice.LoadProperties(); conf.Left = (int) (image.Width*prop.LiveviewSettings.HorizontalMin/100); conf.Width = (image.Width* (prop.LiveviewSettings.HorizontalMax - prop.LiveviewSettings.HorizontalMin)/100); conf.Top = (image.Height*prop.LiveviewSettings.VerticalMin/100); conf.Height = (image.Height*(prop.LiveviewSettings.VerticalMax - prop.LiveviewSettings.VerticalMin)/ 100); } if (conf.CropMargins) { conf.Left = image.Width * conf.WidthProcent / 100; conf.Width = image.Width - (conf.Left*2); conf.Top = image.Height * conf.HeightProcent / 100; conf.Height = image.Height - (conf.Top*2); } MagickGeometry geometry = new MagickGeometry(); geometry.Width = conf.Width; geometry.Height = conf.Height; geometry.X = conf.Left; geometry.Y = conf.Top; image.Crop(geometry); image.Format = MagickFormat.Jpeg; image.Write(dest); } return dest; }
public bool Execute(FileItem item, AutoExportPluginConfig configData) { configData.IsRedy = false; configData.IsError = false; var filename = item.FileName; var conf = new ExecuteFilePluginViewModel(configData); if (string.IsNullOrEmpty(conf.PathToExe) || !File.Exists(conf.PathToExe)) { configData.IsRedy = true; configData.IsError = true; configData.Error = "No executable path was set or executable not found"; return false; } var outfile = Path.Combine(Path.GetTempPath(), Path.GetFileName(filename)); outfile = AutoExportPluginHelper.ExecuteTransformPlugins(item, configData, outfile); if (File.Exists(outfile)) { PhotoUtils.Run(conf.PathToExe, string.IsNullOrEmpty(conf.Params) ? outfile : conf.Params.Replace("%1", outfile), ProcessWindowStyle.Normal); } else { configData.IsError = true; configData.Error = "Output file not found !"; } configData.IsRedy = true; return true; }
public bool Execute(FileItem item, AutoExportPluginConfig configData) { configData.IsRedy = false; configData.IsError = false; var filename = item.FileName; var conf = new CopyFilePluginViewModel(configData); if (string.IsNullOrEmpty(conf.Path)) { configData.IsRedy = true; configData.IsError = true; configData.Error = "No export path was set"; return false; } if (!Directory.Exists(conf.Path)) Directory.CreateDirectory(conf.Path); string name = item.Name; if (!string.IsNullOrEmpty(conf.FileName)) { name = conf.FileName; if (name.Contains("%1")) name = name.Replace("%1", Path.GetFileNameWithoutExtension(item.Name)); if (!name.Contains(".")) name = name + Path.GetExtension(item.Name); } var outfile = Path.Combine(conf.Path, name); AutoExportPluginHelper.ExecuteTransformPlugins(item, configData, outfile); configData.IsRedy = true; return true; }
public bool Execute(FileItem item, AutoExportPluginConfig configData) { Thread thread = new Thread(() => Send(item, configData)); thread.Start(); return true; return true; }
public DbFile(FileItem item, string serial="", string camera="", string session="") { Copy(item); CameraSerial = serial; Camera = camera; Session = session; }
public void Send(FileItem item, AutoExportPluginConfig configData) { try { var filename = item.FileName; configData.IsRedy = false; configData.IsError = false; var conf = new DropboxViewModel(configData); var outfile = PhotoUtils.ReplaceExtension(Path.GetTempFileName(), Path.GetExtension(item.Name)); outfile = AutoExportPluginHelper.ExecuteTransformPlugins(item, configData, outfile); conf.Upload(outfile, ServiceProvider.Settings.DefaultSession.Name, item.Name); // remove unused file if (outfile != item.FileName) { PhotoUtils.WaitForFile(outfile); File.Delete(outfile); } } catch (Exception exception) { Log.Error("Error send dropbox file", exception); configData.IsError = true; configData.Error = exception.Message; } configData.IsRedy = true; }
public void Send(FileItem item, AutoExportPluginConfig configData) { try { var filename = item.FileName; configData.IsRedy = false; configData.IsError = false; var conf = new FacebookPluginViewModel(configData, false); var outfile = Path.Combine(Path.GetTempPath(), Path.GetFileName(filename)); outfile = AutoExportPluginHelper.ExecuteTransformPlugins(item, configData, outfile); conf.UploadFile(outfile); // remove unused file if (outfile != item.FileName) { PhotoUtils.WaitForFile(outfile); File.Delete(outfile); } } catch (Exception exception) { Log.Error("Error send facebook file", exception); configData.IsError = true; configData.Error = exception.Message; } configData.IsRedy = true; }
public string Execute(FileItem item,string infile, string dest, ValuePairEnumerator configData) { var conf = new CropTransformViewModel(configData); using (var fileStream = new MemoryStream(File.ReadAllBytes(infile))) { BitmapDecoder bmpDec = BitmapDecoder.Create(fileStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad); WriteableBitmap writeableBitmap = BitmapFactory.ConvertToPbgra32Format(bmpDec.Frames[0]); if (conf.FromLiveView && ServiceProvider.DeviceManager.SelectedCameraDevice != null) { var prop = ServiceProvider.DeviceManager.SelectedCameraDevice.LoadProperties(); conf.Left = (int) (writeableBitmap.PixelWidth*prop.LiveviewSettings.HorizontalMin/100); conf.Width = (int) (writeableBitmap.PixelWidth* (prop.LiveviewSettings.HorizontalMax - prop.LiveviewSettings.HorizontalMin)/100); conf.Top = (int) (writeableBitmap.Height*prop.LiveviewSettings.VerticalMin/100); conf.Height = (int) (writeableBitmap.Height* (prop.LiveviewSettings.VerticalMax - prop.LiveviewSettings.VerticalMin)/100); } BitmapLoader.Save2Jpg(writeableBitmap.Crop(conf.Left,conf.Top,conf.Width,conf.Height), dest); } return dest; }
public string TransformTemplate(FileItem item, string text) { Regex regPattern = new Regex(@"\[(.*?)\]", RegexOptions.Singleline); MatchCollection matchX = regPattern.Matches(text); return matchX.Cast<Match>().Aggregate(text, (current1, match) => item.FileNameTemplates.Where(template => System.String.Compare(template.Name, match.Value, System.StringComparison.InvariantCultureIgnoreCase) == 0).Aggregate(current1, (current, template) => current.Replace(match.Value, template.Value))); }
public string Execute(FileItem item, string infile, string dest, ValuePairEnumerator configData) { Thread thread = new Thread(() => ExecuteThread(item, infile, dest, configData)); thread.SetApartmentState(ApartmentState.STA); thread.Start(); thread.Join(); return dest; }
public bool Execute(FileItem item, AutoExportPluginConfig configData) { //if (!configData.IsRedy) // return false; //Print(filename, configData); Thread thread = new Thread(() => Print(item, configData)); thread.SetApartmentState(ApartmentState.STA); thread.Start(); return true; }
public string Pharse(string template, PhotoSession session, ICameraDevice device, string fileName, string tempfileName) { if (!File.Exists(tempfileName)) return ""; FileItem item = new FileItem(tempfileName); BitmapLoader.Instance.GetMetadata(item); string tag = template.Replace("[", "").Replace("]", ""); if (item.FileInfo.ExifTags.ContainName(tag)) return item.FileInfo.ExifTags[tag].Replace(":", "_").Replace("?", "_").Replace("*", "_").Replace("\\", "_"); ; return template; }
public bool Execute(FileItem item, AutoExportPluginConfig configData) { configData.IsRedy = false; configData.IsError = false; var filename = item.FileName; var conf = new TransformPluginViewModel(configData); var outfile = Path.GetTempFileName(); outfile = PhotoUtils.ReplaceExtension(outfile, Path.GetExtension(filename)); outfile = AutoExportPluginHelper.ExecuteTransformPlugins(item, configData, outfile); if (conf.CreateNew) { string newFile = Path.Combine(Path.GetDirectoryName(filename), Path.GetFileNameWithoutExtension(filename) + "_transformed" + ".jpg"); newFile = PhotoUtils.GetNextFileName(newFile); File.Copy(outfile, newFile, true); if (ServiceProvider.Settings.DefaultSession.GetFile(newFile) == null) { Application.Current.Dispatcher.Invoke(new Action(() => { FileItem im = new FileItem(newFile); im.Transformed = true; var i = ServiceProvider.Settings.DefaultSession.Files.IndexOf(item); if (ServiceProvider.Settings.DefaultSession.Files.Count - 1 == i) { ServiceProvider.Settings.DefaultSession.Files.Add(im); } else { ServiceProvider.Settings.DefaultSession.Files.Insert(i + 1, im); } })); } } else { // wait for file to be not locked PhotoUtils.WaitForFile(filename); File.Copy(outfile, filename, true); item.IsLoaded = false; item.RemoveThumbs(); item.Transformed = true; } // remove unused file if (outfile != item.FileName) { PhotoUtils.WaitForFile(outfile); File.Delete(outfile); } configData.IsRedy = true; return true; }
public string Execute(FileItem item, string infile, string dest, ValuePairEnumerator configData) { var conf = new EffectViewModel(configData); dest = Path.Combine(Path.GetDirectoryName(dest), Path.GetFileNameWithoutExtension(dest) + ".jpg"); using (MagickImage image = new MagickImage(infile)) { switch (conf.SelectedMode) { case 0: image.SepiaTone(new Percentage(conf.Param1)); break; case 1: image.OilPaint(conf.Param1,0.1); break; case 2: image.Sketch(); break; case 3: image.Charcoal(); break; case 4: image.Solarize(); break; case 5: image.Swirl(conf.Param1); break; case 6: image.Wave(PixelInterpolateMethod.Bilinear, conf.Param1, conf.Param2); break; case 7: image.BlueShift(); break; case 8: image.RotationalBlur(conf.Param1); break; case 9: image.Raise(conf.Param1); break; case 10: image.Negate(); break; case 11: image.ColorSpace = ColorSpace.Gray; break; } image.Format = MagickFormat.Jpeg; image.Write(dest); } return dest; }
public string Execute(FileItem fileItem,string infile, string dest, ValuePairEnumerator configData) { var conf = new ResizeTransformViewModel(configData); dest = Path.Combine(Path.GetDirectoryName(dest), Path.GetFileNameWithoutExtension(dest) + ".jpg"); using (MagickImage image = new MagickImage(infile)) { MagickGeometry geometry = new MagickGeometry(conf.Width, conf.Height); geometry.IgnoreAspectRatio = !conf.KeepAspect; image.Resize(geometry); image.Format = MagickFormat.Jpeg; image.Write(dest); } return dest; }
private void Send(FileItem item, AutoExportPluginConfig configData) { try { var filename = item.FileName; configData.IsRedy = false; configData.IsError = false; var conf = new FtpPluginViewModel(configData); var outfile = Path.Combine(Path.GetTempPath(), Path.GetFileName(filename)); outfile = AutoExportPluginHelper.ExecuteTransformPlugins(item, configData, outfile); using (FtpClient conn = new FtpClient()) { conn.Host = conf.Server; conn.Credentials = new NetworkCredential(conf.User, conf.Pass); if (!string.IsNullOrWhiteSpace(conf.ServerPath)) conn.SetWorkingDirectory(conf.ServerPath); using (Stream ostream = conn.OpenWrite(Path.GetFileName(outfile))) { try { var data = File.ReadAllBytes(outfile); ostream.Write(data, 0, data.Length); } finally { ostream.Close(); } } } // remove unused file if (outfile != item.FileName) { PhotoUtils.WaitForFile(outfile); File.Delete(outfile); } } catch (Exception exception) { Log.Error("Error senf ftp file", exception); configData.IsError = true; configData.Error = exception.Message; } configData.IsRedy = true; }
public string Execute(FileItem item, string infile, string dest, ValuePairEnumerator configData) { var conf = new ScriptTransformViewModel(configData); using (Stream stream = ToStream(conf.Script)) { MagickScript script = new MagickScript(stream); // Read image from file using (MagickImage image = new MagickImage(infile)) { // Execute script with the image and write it to a jpg file script.Execute(image); image.Write(dest); } } return dest; }
public static string ExecuteTransformPlugins(FileItem item, AutoExportPluginConfig configData, string infile, string outfile) { if (infile != outfile) File.Copy(infile, outfile, true); if (configData.ConfigDataCollection == null || configData.ConfigDataCollection.Count == 0) return outfile; foreach (var enumerator in configData.ConfigDataCollection) { var plugin = enumerator["TransformPlugin"]; var tp = ServiceProvider.PluginManager.GetImageTransformPlugin(plugin); if (tp != null) { outfile = tp.Execute(item, outfile, outfile, enumerator); ServiceProvider.Analytics.TransformPluginExecute(plugin); Log.Debug("TransformPlugin executed " + plugin); } } return outfile; }
public string Execute(FileItem item, string infile, string dest, ValuePairEnumerator configData) { var conf = new PixelBinningViewModel(configData); dest = Path.Combine(Path.GetDirectoryName(dest), Path.GetFileNameWithoutExtension(dest) + ".jpg"); using (MagickImage image = new MagickImage(infile)) { int newx = image.Width/(conf.SelectedMode + 2); int newy = image.Height / (conf.SelectedMode + 2); int cropx = newx * (conf.SelectedMode + 2); int cropy = newy * (conf.SelectedMode + 2); if (cropx != image.Width || cropy != image.Height) image.Crop(cropx, cropy, Gravity.Center); image.FilterType = FilterType.Box; image.Resize(newx,newy); image.Format = MagickFormat.Jpeg; image.Write(dest); } return dest; }
public void Send(FileItem item, AutoExportPluginConfig configData) { try { configData.IsRedy = false; configData.IsError = false; var conf = new SendEmailPluginViewModel(configData); var outfile = PhotoUtils.ReplaceExtension(Path.GetTempFileName(),Path.GetExtension(item.Name)); outfile = AutoExportPluginHelper.ExecuteTransformPlugins(item, configData, outfile); var client = new MailgunClient("digicamcontrol.mailgun.org", "key-6n75wci5cpuz74vsxfcwfkf-t8v74g82",3); var message = new MailMessage(conf.From, conf.To) { Subject = (string.IsNullOrEmpty(conf.Subject) ? "Your photo":conf.TransformTemplate(item,conf.Subject)), Body = (string.IsNullOrEmpty(conf.Message) ? "." : conf.TransformTemplate(item, conf.Message)), IsBodyHtml = true }; using (MemoryStream stream = new MemoryStream(File.ReadAllBytes(outfile))) { message.Attachments.Add(new Attachment(stream, item.Name)); client.SendMail(message); message.Dispose(); } // remove unused file if (outfile != item.FileName) { PhotoUtils.WaitForFile(outfile); File.Delete(outfile); } } catch (Exception exception) { Log.Error("Error send facebook file", exception); configData.IsError = true; configData.Error = exception.Message; } configData.IsRedy = true; }
public string Execute(FileItem item, string infile, string dest, ValuePairEnumerator configData) { var conf = new EnhanceViewModel(configData); dest = Path.Combine(Path.GetDirectoryName(dest), Path.GetFileNameWithoutExtension(dest) + ".jpg"); using (MagickImage image = new MagickImage(infile)) { if (conf.Normalize) image.Normalize(); if (conf.AutoGamma) image.AutoGamma(); image.BrightnessContrast(new Percentage(conf.Brightness), new Percentage(conf.Contrast)); if (conf.SContrast > 0) image.SigmoidalContrast(true, conf.SContrast); if (conf.Edge) image.AdaptiveSharpen(); if (conf.Sharpen > 0) image.UnsharpMask(1.5, 1.5, conf.Sharpen/100.0, 0.2); image.Format = MagickFormat.Jpeg; image.Write(dest); } return dest; }
public static string ExecuteTransformPlugins(FileItem item, AutoExportPluginConfig configData, string outfile, bool preview = false) { File.Copy(preview ? item.LargeThumb : item.FileName, outfile, true); if (configData.ConfigDataCollection == null || configData.ConfigDataCollection.Count == 0) return outfile; foreach (var enumerator in configData.ConfigDataCollection) { try { var plugin = enumerator["TransformPlugin"]; var tp = ServiceProvider.PluginManager.GetImageTransformPlugin(plugin); if (tp != null) outfile = tp.Execute(item, outfile, outfile, enumerator); } catch (Exception exception) { Log.Error("Error execute transform olugin ", exception); } } return outfile; }
public bool Execute(FileItem item, AutoExportPluginConfig configData) { configData.IsRedy = false; configData.IsError = false; var filename = item.FileName; var outfile = Path.GetTempFileName(); AutoExportPluginHelper.ExecuteTransformPlugins(item, configData, outfile); // wait for file to be not locked PhotoUtils.WaitForFile(filename); File.Copy(outfile, filename, true); File.Delete(outfile); item.IsLoaded = false; item.RemoveThumbs(); // remove unused file if (outfile != item.FileName) { PhotoUtils.WaitForFile(outfile); File.Delete(outfile); } configData.IsRedy = true; return true; }
public void GenerateCache(FileItem fileItem) { bool deleteFile = false; if (fileItem == null) { return; } if (!File.Exists(fileItem.FileName)) { return; } if ((File.Exists(fileItem.LargeThumb) && File.Exists(fileItem.SmallThumb)) && File.Exists(fileItem.InfoFile)) { return; } if (fileItem.Loading) { return; } fileItem.Loading = true; PhotoUtils.WaitForFile(fileItem.FileName); string filename = fileItem.FileName; if (fileItem.IsMovie) { try { string ffmpeg_exe = Path.Combine(Settings.ApplicationFolder, "ffmpeg.exe"); if (File.Exists(ffmpeg_exe)) { string thumb = Path.Combine(Path.GetDirectoryName(fileItem.FileName), Path.GetFileNameWithoutExtension(fileItem.FileName) + ".thumb.jpg"); PhotoUtils.RunAndWait(ffmpeg_exe, String.Format("-i \"{0}\" -ss 00:00:01.000 -f image2 -vframes 1 \"{1}\"", fileItem.FileName, thumb)); if (File.Exists(thumb)) { deleteFile = true; filename = thumb; } } } catch (Exception exception) { Log.Error("Error get video thumb", exception); } } if (fileItem.IsRaw) { try { string dcraw_exe = Path.Combine(Settings.ApplicationFolder, "dcraw.exe"); if (File.Exists(dcraw_exe)) { string thumb = Path.Combine(Path.GetTempPath(), Path.GetFileNameWithoutExtension(fileItem.FileName) + ".thumb.jpg"); PhotoUtils.RunAndWait(dcraw_exe, string.Format(" -e -O \"{0}\" \"{1}\"", thumb, fileItem.FileName)); if (File.Exists(thumb)) { deleteFile = true; filename = thumb; } } } catch (Exception exception) { Log.Error("Error get dcraw thumb", exception); } } GetMetadata(fileItem); try { using (MagickImage image = new MagickImage(filename)) { fileItem.FileInfo.SetSize(image.Width, image.Height); double dw = (double)LargeThumbSize / image.Width; image.FilterType = FilterType.Box; image.Thumbnail((int)(image.Width * dw), (int)(image.Height * dw)); image.UnsharpMask(1, 1, 0.5, 0.1); PhotoUtils.CreateFolder(fileItem.LargeThumb); image.Write(fileItem.LargeThumb); fileItem.IsLoaded = true; fileItem.Loading = false; dw = (double)SmallThumbSize / image.Width; image.Thumbnail((int)(image.Width * dw), (int)(image.Height * dw)); image.UnsharpMask(1, 1, 0.5, 0.1); PhotoUtils.CreateFolder(fileItem.SmallThumb); image.Write(fileItem.SmallThumb); fileItem.Thumbnail = LoadImage(fileItem.SmallThumb); } fileItem.SaveInfo(); SetImageInfo(fileItem); if (deleteFile) { File.Delete(filename); } OnMetaDataUpdated(fileItem); } catch (Exception exception) { Log.Error("Error generating cache " + fileItem.FileName, exception); } fileItem.Loading = false; }
public void LoadHistogram(FileItem item) { try { var fileInfo = item.FileInfo; if (fileInfo != null) { if (fileInfo.IsLoading) { return; } fileInfo.IsLoading = true; } if (fileInfo == null || fileInfo.ExifTags == null || fileInfo.ExifTags.Items.Count == 0) { GetMetadata(item); fileInfo = item.FileInfo; fileInfo.IsLoading = true; } if (!File.Exists(item.SmallThumb)) { fileInfo.IsLoading = false; return; } using (MagickImage image = new MagickImage(item.SmallThumb)) { var Blue = new int[256]; var Green = new int[256]; var Red = new int[256]; var Luminance = new int[256]; Dictionary <MagickColor, int> h = image.Histogram(); foreach (var i in h) { byte R = i.Key.R; byte G = i.Key.G; byte B = i.Key.B; Blue[B] += i.Value; Green[G] += i.Value; Red[R] += i.Value; int lum = (R + R + R + B + G + G + G + G) >> 3; Luminance[lum] += i.Value; } fileInfo.HistogramBlue = Blue; fileInfo.HistogramGreen = Green; fileInfo.HistogramRed = Red; fileInfo.HistogramLuminance = Luminance; fileInfo.IsLoading = false; item.FileInfo = fileInfo; } item.SaveInfo(); if (ServiceProvider.Settings.SelectedBitmap.FileItem == item) { SetData(ServiceProvider.Settings.SelectedBitmap, ServiceProvider.Settings.SelectedBitmap.FileItem); } } catch (Exception ex) { Log.Error("Unable to load histogram", ex); } //item.FileInfo.HistogramBlue = SmoothHistogram(item.FileInfo.HistogramBlue); //item.FileInfo.HistogramGreen = SmoothHistogram(item.FileInfo.HistogramGreen); //item.FileInfo.HistogramRed = SmoothHistogram(item.FileInfo.HistogramRed); //item.FileInfo.HistogramLuminance = SmoothHistogram(item.FileInfo.HistogramLuminance); }
protected virtual void OnMetaDataUpdated(FileItem item) { var handler = MetaDataUpdated; if (handler != null) handler(this, item); }
public WriteableBitmap LoadImage(FileItem fileItem, bool fullres, bool showfocuspoints) { if (fileItem == null) { return(null); } if (!File.Exists(fileItem.LargeThumb) && !fullres) { return(null); } if (File.Exists(fileItem.InfoFile)) { fileItem.LoadInfo(); } if (fileItem.FileInfo == null) { fileItem.FileInfo = new FileInfo(); } try { BitmapDecoder bmpDec = null; if (fullres && fileItem.IsRaw) { try { string dcraw_exe = Path.Combine(Settings.ApplicationFolder, "dcraw.exe"); if (File.Exists(dcraw_exe)) { string thumb = Path.Combine(Path.GetTempPath(), Path.GetFileNameWithoutExtension(fileItem.FileName) + ".thumb.jpg"); PhotoUtils.RunAndWait(dcraw_exe, string.Format(" -e -O \"{0}\" \"{1}\"", thumb, fileItem.FileName)); if (File.Exists(thumb)) { bmpDec = BitmapDecoder.Create(new Uri(thumb), BitmapCreateOptions.None, BitmapCacheOption.OnLoad); File.Delete(thumb); } } } catch (Exception exception) { Log.Error("Error get dcraw thumb", exception); } } PhotoUtils.WaitForFile(fullres ? fileItem.FileName : fileItem.LargeThumb); if (bmpDec == null) { bmpDec = BitmapDecoder.Create(new Uri(fullres ? fileItem.FileName : fileItem.LargeThumb), BitmapCreateOptions.None, BitmapCacheOption.OnLoad); } // if no future processing required if (!showfocuspoints && ServiceProvider.Settings.RotateIndex == 0 && !ServiceProvider.Settings.FlipPreview) { fileItem.Loading = false; var b = new WriteableBitmap(bmpDec.Frames[0]); b.Freeze(); return(b); } var bitmap = BitmapFactory.ConvertToPbgra32Format(bmpDec.Frames[0]); if (showfocuspoints && !fileItem.Transformed) { DrawFocusPoints(fileItem, bitmap); } if (ServiceProvider.Settings.RotateIndex != 0) { switch (ServiceProvider.Settings.RotateIndex) { case 1: bitmap = bitmap.Rotate(90); break; case 2: bitmap = bitmap.Rotate(180); break; case 3: bitmap = bitmap.Rotate(270); break; } } if (ServiceProvider.Settings.FlipPreview) { bitmap = bitmap.Flip(WriteableBitmapExtensions.FlipMode.Vertical); } bitmap.Freeze(); return(bitmap); } catch (Exception exception) { Log.Error("Error loading image", exception); if (exception.GetType() == typeof(OutOfMemoryException) && fullres) { return(LoadImage(fileItem, false)); } } return(null); }
public void GenerateCache(FileItem fileItem) { bool deleteFile = false; if (fileItem == null) { return; } if (!File.Exists(fileItem.FileName)) { return; } if ((File.Exists(fileItem.LargeThumb) && File.Exists(fileItem.SmallThumb)) && File.Exists(fileItem.InfoFile)) { return; } string filename = fileItem.FileName; if (fileItem.IsRaw) { try { string dcraw_exe = Path.Combine(Settings.ApplicationFolder, "dcraw.exe"); if (File.Exists(dcraw_exe)) { PhotoUtils.RunAndWait(dcraw_exe, string.Format(" -e \"{0}\"", fileItem.FileName)); string thumb = Path.Combine(Path.GetDirectoryName(fileItem.FileName), Path.GetFileNameWithoutExtension(fileItem.FileName) + ".thumb.jpg"); if (File.Exists(thumb)) { deleteFile = true; filename = thumb; } } } catch (Exception exception) { Log.Error("Error get dcraw thumb", exception); } } GetMetadata(fileItem); try { using (MemoryStream fileStream = new MemoryStream(File.ReadAllBytes(filename))) { BitmapDecoder bmpDec = BitmapDecoder.Create(fileStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad); bmpDec.DownloadProgress += (o, args) => StaticHelper.Instance.LoadingProgress = args.Progress; fileItem.FileInfo.Width = bmpDec.Frames[0].PixelWidth; fileItem.FileInfo.Height = bmpDec.Frames[0].PixelHeight; double dw = (double)LargeThumbSize / bmpDec.Frames[0].PixelWidth; WriteableBitmap writeableBitmap = BitmapFactory.ConvertToPbgra32Format(GetBitmapFrame(bmpDec.Frames[0], (int)(bmpDec.Frames[0].PixelWidth * dw), (int)(bmpDec.Frames[0].PixelHeight * dw), BitmapScalingMode.Linear)); LoadHistogram(fileItem, writeableBitmap); Save2Jpg(writeableBitmap, fileItem.LargeThumb); dw = (double)SmallThumbSize / writeableBitmap.PixelWidth; writeableBitmap = writeableBitmap.Resize((int)(writeableBitmap.PixelWidth * dw), (int)(writeableBitmap.PixelHeight * dw), WriteableBitmapExtensions.Interpolation.Bilinear); if (fileItem.FileInfo.ExifTags.ContainName("Exif.Image.Orientation")) { if (fileItem.FileInfo.ExifTags["Exif.Image.Orientation"] == "bottom, right") { writeableBitmap = writeableBitmap.Rotate(180); } //if (fileItem.FileInfo.ExifTags["Exif.Image.Orientation"] == "top, left") // writeableBitmap = writeableBitmap.Rotate(180); if (fileItem.FileInfo.ExifTags["Exif.Image.Orientation"] == "right, top") { writeableBitmap = writeableBitmap.Rotate(90); } if (fileItem.FileInfo.ExifTags["Exif.Image.Orientation"] == "left, bottom") { writeableBitmap = writeableBitmap.Rotate(270); } } Save2Jpg(writeableBitmap, fileItem.SmallThumb); fileItem.Thumbnail = LoadSmallImage(fileItem); fileItem.IsLoaded = true; fileItem.SaveInfo(); if (deleteFile) { File.Delete(filename); } } } catch (Exception exception) { Log.Error("Error generating cache " + fileItem.FileName, exception); } }
public WriteableBitmap LoadImage(FileItem fileItem, bool fullres) { if (ServiceProvider.Settings.LowMemoryUsage) { fullres = false; } if (fileItem == null) { return(null); } if (!File.Exists(fileItem.LargeThumb) && !fullres) { return(null); } if (File.Exists(fileItem.InfoFile)) { fileItem.LoadInfo(); } else { fileItem.FileInfo = new FileInfo(); } try { BitmapDecoder bmpDec = BitmapDecoder.Create(new Uri(fullres ? fileItem.FileName : fileItem.LargeThumb), BitmapCreateOptions.None, BitmapCacheOption.OnLoad); double dw = (double)MaxThumbSize / bmpDec.Frames[0].PixelWidth; WriteableBitmap bitmap; if (fullres) { bitmap = BitmapFactory.ConvertToPbgra32Format(GetBitmapFrame(bmpDec.Frames[0], (int)(bmpDec.Frames[0].PixelWidth * dw), (int)(bmpDec.Frames[0].PixelHeight * dw), BitmapScalingMode.NearestNeighbor)); } else { bitmap = BitmapFactory.ConvertToPbgra32Format(bmpDec.Frames[0]); } if (ServiceProvider.Settings.ShowFocusPoints) { DrawFocusPoints(fileItem, bitmap); } if (fileItem.FileInfo.ExifTags.ContainName("Exif.Image.Orientation") && !fileItem.IsRaw) { if (fileItem.FileInfo.ExifTags["Exif.Image.Orientation"] == "bottom, right") { bitmap = bitmap.Rotate(180); } //if (fileItem.FileInfo.ExifTags["Exif.Image.Orientation"] == "top, left") // bitmap = bitmap.Rotate(180); if (fileItem.FileInfo.ExifTags["Exif.Image.Orientation"] == "right, top") { bitmap = bitmap.Rotate(90); } if (fileItem.FileInfo.ExifTags["Exif.Image.Orientation"] == "left, bottom") { bitmap = bitmap.Rotate(270); } } if (ServiceProvider.Settings.RotateIndex != 0) { switch (ServiceProvider.Settings.RotateIndex) { case 1: bitmap = bitmap.Rotate(90); break; case 2: bitmap = bitmap.Rotate(180); break; case 3: bitmap = bitmap.Rotate(270); break; } } bitmap.Freeze(); return(bitmap); } catch (Exception exception) { Log.Error("Error loading image", exception); } return(null); }
public WriteableBitmap LoadImage(FileItem fileItem, bool fullres) { return(LoadImage(fileItem, fullres, ServiceProvider.Settings.ShowFocusPoints)); }
public void SetData(BitmapFile file, FileItem fileItem) { if (fileItem == null || fileItem.FileInfo == null) return; fileItem.LoadInfo(); file.FileName = Path.GetFileNameWithoutExtension(fileItem.FileName); file.Comment = ""; if (fileItem.FileInfo.ExifTags.ContainName("Iptc.Application2.Caption")) file.Comment = fileItem.FileInfo.ExifTags["Iptc.Application2.Caption"]; file.Metadata.Clear(); foreach (ValuePair item in fileItem.FileInfo.ExifTags.Items) { file.Metadata.Add(new DictionaryItem() { Name = item.Name, Value = item.Value }); } file.BlueColorHistogramPoints = ConvertToPointCollection(fileItem.FileInfo.HistogramBlue); file.RedColorHistogramPoints = ConvertToPointCollection(fileItem.FileInfo.HistogramRed); file.GreenColorHistogramPoints = ConvertToPointCollection(fileItem.FileInfo.HistogramGreen); file.LuminanceHistogramPoints = ConvertToPointCollection(fileItem.FileInfo.HistogramLuminance); // file.InfoLabel = Path.GetFileName(file.FileItem.FileName); file.InfoLabel = ""; //file.InfoLabel += String.Format(" | {0}x{1}", fileItem.FileInfo.Width, fileItem.FileInfo.Height); if (fileItem.FileInfo.ExifTags.ContainName("Exif.Photo.ExposureTime")) { file.InfoLabel += "E " + fileItem.FileInfo.ExifTags["Exif.Photo.ExposureTime"]; } if (fileItem.FileInfo.ExifTags.ContainName("Exif.Photo.FNumber")) { file.InfoLabel += " | " + fileItem.FileInfo.ExifTags["Exif.Photo.FNumber"]; } if (fileItem.FileInfo.ExifTags.ContainName("Exif.Photo.ISOSpeedRatings")) { file.InfoLabel += " | ISO " + fileItem.FileInfo.ExifTags["Exif.Photo.ISOSpeedRatings"]; } if (fileItem.FileInfo.ExifTags.ContainName("Exif.Photo.FocalLength")) { file.InfoLabel += " | " + fileItem.FileInfo.ExifTags["Exif.Photo.FocalLength"]; } SetImageInfo(fileItem); }
public void SetImageInfo(FileItem fileItem) { if (fileItem == null || fileItem.FileInfo == null) return; if (fileItem.FileInfo.ExifTags.ContainName("Exif.Photo.ExposureTime")) { fileItem.E = fileItem.FileInfo.ExifTags["Exif.Photo.ExposureTime"]; } if (fileItem.FileInfo.ExifTags.ContainName("Exif.Photo.FNumber")) { fileItem.F = fileItem.FileInfo.ExifTags["Exif.Photo.FNumber"].Replace("F", ""); } if (fileItem.FileInfo.ExifTags.ContainName("Exif.Photo.ISOSpeedRatings")) { fileItem.Iso = fileItem.FileInfo.ExifTags["Exif.Photo.ISOSpeedRatings"]; } if (fileItem.FileInfo.ExifTags.ContainName("Exif.Photo.ExposureBiasValue")) fileItem.ExposureBias = fileItem.FileInfo.ExifTags["Exif.Photo.ExposureBiasValue"]; if (fileItem.FileInfo.ExifTags.ContainName("Exif.Photo.FocalLength")) { fileItem.FocalLength = fileItem.FileInfo.ExifTags["Exif.Photo.FocalLength"]; } }
public WriteableBitmap LoadImage(FileItem fileItem, bool fullres, bool showfocuspoints) { if (fileItem == null) { return(null); } if (!File.Exists(fileItem.LargeThumb) && !fullres) { return(null); } if (File.Exists(fileItem.InfoFile)) { fileItem.LoadInfo(); } else { fileItem.FileInfo = new FileInfo(); } try { BitmapDecoder bmpDec = null; if (fullres && fileItem.IsRaw) { try { string dcraw_exe = Path.Combine(Settings.ApplicationFolder, "dcraw.exe"); if (File.Exists(dcraw_exe)) { PhotoUtils.RunAndWait(dcraw_exe, string.Format(" -e \"{0}\"", fileItem.FileName)); string thumb = Path.Combine(Path.GetDirectoryName(fileItem.FileName), Path.GetFileNameWithoutExtension(fileItem.FileName) + ".thumb.jpg"); if (File.Exists(thumb)) { bmpDec = BitmapDecoder.Create(new Uri(thumb), BitmapCreateOptions.None, BitmapCacheOption.OnLoad); File.Delete(thumb); } } } catch (Exception exception) { Log.Error("Error get dcraw thumb", exception); } } if (bmpDec == null) { bmpDec = BitmapDecoder.Create(new Uri(fullres ? fileItem.FileName : fileItem.LargeThumb), BitmapCreateOptions.None, BitmapCacheOption.OnLoad); } double dw = (double)MaxThumbSize / bmpDec.Frames[0].PixelWidth; WriteableBitmap bitmap; /* * if (fullres) * bitmap = * BitmapFactory.ConvertToPbgra32Format(GetBitmapFrame(bmpDec.Frames[0], * (int) (bmpDec.Frames[0].PixelWidth*dw), * (int) (bmpDec.Frames[0].PixelHeight*dw), * BitmapScalingMode.NearestNeighbor)); * else * bitmap = BitmapFactory.ConvertToPbgra32Format(bmpDec.Frames[0]); */ bitmap = BitmapFactory.ConvertToPbgra32Format(bmpDec.Frames[0]); if (showfocuspoints) { DrawFocusPoints(fileItem, bitmap); } if (fileItem.FileInfo != null && fileItem.FileInfo.ExifTags.ContainName("Exif.Image.Orientation")) { if (fileItem.FileInfo.ExifTags["Exif.Image.Orientation"] == "bottom, right") { bitmap = bitmap.Rotate(180); } //if (fileItem.FileInfo.ExifTags["Exif.Image.Orientation"] == "top, left") // bitmap = bitmap.Rotate(180); if (fileItem.FileInfo.ExifTags["Exif.Image.Orientation"] == "right, top") { bitmap = bitmap.Rotate(90); } if (fileItem.FileInfo.ExifTags["Exif.Image.Orientation"] == "left, bottom") { bitmap = bitmap.Rotate(270); } } if (ServiceProvider.Settings.RotateIndex != 0) { switch (ServiceProvider.Settings.RotateIndex) { case 1: bitmap = bitmap.Rotate(90); break; case 2: bitmap = bitmap.Rotate(180); break; case 3: bitmap = bitmap.Rotate(270); break; } } if (ServiceProvider.Settings.FlipPreview) { bitmap = bitmap.Flip(WriteableBitmapExtensions.FlipMode.Vertical); } bitmap.Freeze(); return(bitmap); } catch (Exception exception) { Log.Error("Error loading image", exception); } return(null); }
void ServiceProvider_FileTransfered(object sender, FileItem fileItem) { if (Active && !string.IsNullOrEmpty(AfterTransfer) && SendCommand) Send(AfterTransfer); }
public void Load(FileItem fileItem) { var startInfo = new ProcessStartInfo(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Tools", "exiv2.exe")) { Arguments = "\"" + fileItem.FileName + "\"" + " -p a", RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Minimized }; var process = Process.Start(startInfo); process.OutputDataReceived += process_OutputDataReceived; process.BeginOutputReadLine(); process.WaitForExit(); if (Tags.ContainsKey("Exif.Photo.PixelXDimension")) { int.TryParse(Tags["Exif.Photo.PixelXDimension"].Value, out Width); int.TryParse(Tags["Exif.Photo.PixelYDimension"].Value, out Height); } else { if (Tags.ContainsKey("Exif.SubImage2.ImageWidth")) { int.TryParse(Tags["Exif.SubImage2.ImageWidth"].Value, out Width); } if (Tags.ContainsKey("Exif.SubImage2.ImageLength")) { int.TryParse(Tags["Exif.SubImage2.ImageLength"].Value, out Height); } } int relWidth = Width; int relHeight = Height; Focuspoints = new List <Rect>(); if (Tags.ContainsKey("Exif.NikonAf2.ContrastDetectAF")) { if (Tags["Exif.NikonAf2.ContrastDetectAF"].Value == "On") { int x = (int)(ToSize(Tags["Exif.NikonAf2.AFAreaXPosition"].Value)); int y = (int)(ToSize(Tags["Exif.NikonAf2.AFAreaYPosition"].Value)); int w = (int)(ToSize(Tags["Exif.NikonAf2.AFAreaWidth"].Value)); int h = (int)(ToSize(Tags["Exif.NikonAf2.AFAreaHeight"].Value)); if (x - (w / 2) > 0 && y - (h / 2) > 0 && x > 0 && y > 0 && w > 0 && h > 0) { Focuspoints.Add(new Rect(x - (w / 2), y - (h / 2), w, h)); } } } if (Tags.ContainsKey("Exif.NikonAf2.PhaseDetectAF") && Tags["Exif.NikonAf2.PhaseDetectAF"].Value == "On (11-point)") { if (Tags["Exif.NikonAf2.AFPointsUsed"].Value.Contains(" ")) { string[] strbytes = Tags["Exif.NikonAf2.AFPointsUsed"].Value.Split(' '); byte[] bytes = new byte[8]; for (int i = 0; i < strbytes.Length; i++) { byte.TryParse(strbytes[i], out bytes[i]); } Int64 focuspoints = BitConverter.ToInt64(bytes, 0); for (var i = 1; i < 12; i++) { if (StaticHelper.GetBit(focuspoints, i - 1)) { Focuspoints.Add(ToRect(relWidth, relHeight, FocusPoints11[i.ToString()], 1, 1)); } } } } if (Tags.ContainsKey("Exif.NikonAf2.PhaseDetectAF") && Tags["Exif.NikonAf2.PhaseDetectAF"].Value == "On (51-point)") { if (Tags["Exif.NikonAf2.AFPointsUsed"].Value.Contains(" ")) { string[] strbytes = Tags["Exif.NikonAf2.AFPointsUsed"].Value.Split(' '); byte[] bytes = new byte[8]; for (int i = 0; i < strbytes.Length; i++) { byte.TryParse(strbytes[i], out bytes[i]); } BitArray bitArray = new BitArray(bytes); for (var i = 1; i < 52; i++) { if (bitArray.Get(i - 1)) { Focuspoints.Add(ToRect(relWidth, relHeight, FocusPoints51[i.ToString()], 1, 1)); } } } } if (Tags.ContainsKey("Exif.Canon.AFInfo")) { if (Tags["Exif.Canon.AFInfo"].Value.Contains(" ")) { string[] vals = Tags["Exif.Canon.AFInfo"].Value.Split(' '); int poinst = PhotoUtils.GetInt(vals[2]); int[] poitw = new int[poinst]; int[] poith = new int[poinst]; int[] poitx = new int[poinst]; int[] poity = new int[poinst]; if (vals.Length > poinst * 4 + 9) { long activepoint = Convert.ToInt64(vals[9 + (poinst * 4)]); for (int i = 0; i < poinst; i++) { poitw[i] = PhotoUtils.GetInt(vals[8 + i]); poith[i] = PhotoUtils.GetInt(vals[8 + (poinst) + i]); poitx[i] = PhotoUtils.GetInt(vals[8 + (poinst * 2) + i]); poity[i] = PhotoUtils.GetInt(vals[8 + (poinst * 3) + i]); } for (int i = 0; i < poinst; i++) { int x = Convert.ToInt16(poitx[i].ToString("X"), 16); int y = Convert.ToInt16(poity[i].ToString("X"), 16); if (StaticHelper.GetBit(activepoint, i)) { x = (Width / 2) + x; y = (Height / 2) - y; Focuspoints.Add(new Rect(x - (poitw[i] / 2), y - (poith[i] / 2), poitw[i], poith[i])); } } } } } if (Tags.ContainsKey("Exif.NikonAf.AFPointsInFocus")) { if (FocusPoints7.ContainsKey(Tags["Exif.NikonAf.AFPointsInFocus"].Value)) { Focuspoints.Add(ToRect(relWidth, relHeight, FocusPoints7[Tags["Exif.NikonAf.AFPointsInFocus"].Value], 1, 1)); } } if (fileItem.FileInfo == null) { fileItem.FileInfo = new FileInfo(); } fileItem.FileInfo.ExifTags.Items.Clear(); foreach (KeyValuePair <string, Exiv2Data> data in Tags) { fileItem.FileInfo.ExifTags.Items.Add(new ValuePair() { Name = data.Key, Value = data.Value.Value }); } fileItem.FileInfo.FocusPoints.Clear(); foreach (Rect focuspoint in Focuspoints) { fileItem.FileInfo.FocusPoints.Add(focuspoint); } return; }
private void Print(FileItem item, AutoExportPluginConfig configData) { try { PrintDialog dlg = new PrintDialog(); configData.IsRedy = false; configData.IsError = false; var conf = new PrintPluginViewModel(configData); var outfile = Path.Combine(Path.GetTempPath(), Path.GetFileName(item.FileName)); outfile = AutoExportPluginHelper.ExecuteTransformPlugins(item, configData, outfile); System.Printing.PrintCapabilities capabilities = dlg.PrintQueue.GetPrintCapabilities(dlg.PrintTicket); var PageWidth = (int)capabilities.PageImageableArea.ExtentWidth; var PageHeight = (int)capabilities.PageImageableArea.ExtentHeight; var panel = new StackPanel { Margin = new Thickness(conf.Margin), }; var image = new Image { Source = BitmapLoader.Instance.LoadImage(outfile, PageWidth > PageHeight ? PageWidth : PageHeight, conf.Rotate ? 90 : 0), Width = PageWidth , Height = PageHeight, Stretch = Stretch.Uniform, }; panel.Children.Add(image); panel.UpdateLayout(); panel.Measure(new Size(PageWidth, PageHeight)); panel.Arrange(new Rect(new Point(0, 0), panel.DesiredSize)); panel.UpdateLayout(); dlg.PrintVisual(panel, item.Name); image.Source = null; panel.Children.Clear(); // remove unused file if (outfile != item.FileName) { PhotoUtils.WaitForFile(outfile); File.Delete(outfile); } } catch (Exception exception) { Log.Error("Error print file", exception); configData.IsError = true; configData.Error = exception.Message; } configData.IsRedy = true; }