mirror of
https://github.com/greenshot/greenshot
synced 2025-07-13 00:23:54 -07:00
added monochrome print option
git-svn-id: http://svn.code.sf.net/p/greenshot/code/trunk@2491 7dccd23d-a4a3-4e1f-8c07-b4c1b4018ab4
This commit is contained in:
parent
9f86db6828
commit
b537ae7e14
11 changed files with 1612 additions and 1480 deletions
|
@ -168,6 +168,7 @@ namespace Greenshot.Configuration {
|
||||||
printoptions_allowrotate,
|
printoptions_allowrotate,
|
||||||
printoptions_allowshrink,
|
printoptions_allowshrink,
|
||||||
printoptions_dontaskagain,
|
printoptions_dontaskagain,
|
||||||
|
printoptions_printmonochrome,
|
||||||
printoptions_timestamp,
|
printoptions_timestamp,
|
||||||
printoptions_inverted,
|
printoptions_inverted,
|
||||||
printoptions_title,
|
printoptions_title,
|
||||||
|
|
|
@ -106,42 +106,18 @@ namespace Greenshot.Destinations {
|
||||||
/// <param name="captureDetails"></param>
|
/// <param name="captureDetails"></param>
|
||||||
/// <returns>ExportInformation</returns>
|
/// <returns>ExportInformation</returns>
|
||||||
public override ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails) {
|
public override ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails) {
|
||||||
ExportInformation exportInformation = new ExportInformation(this.Designation, this.Description);
|
ExportInformation exportInformation = new ExportInformation(this.Designation, this.Description);
|
||||||
PrinterSettings printerSettings = null;
|
PrinterSettings printerSettings = null;
|
||||||
|
if (!string.IsNullOrEmpty(printerName)) {
|
||||||
// Create the output settins
|
printerSettings = new PrintHelper(surface, captureDetails).PrintTo(printerName);
|
||||||
SurfaceOutputSettings printOutputSettings = new SurfaceOutputSettings(OutputFormat.png, 100, false);
|
} else if (!manuallyInitiated) {
|
||||||
|
PrinterSettings settings = new PrinterSettings();
|
||||||
// TODO:
|
printerSettings = new PrintHelper(surface, captureDetails).PrintTo(settings.PrinterName);
|
||||||
// add effects here, e.g. Monochrome
|
} else {
|
||||||
// printOutputSettings.Effects.Add(new MonochromeEffect());
|
printerSettings = new PrintHelper(surface, captureDetails).PrintWithDialog();
|
||||||
// Set the color reducing if needed, this should change the 24/32-> 8 (or later even 1) bpp
|
|
||||||
// printOutputSettings.ReduceColors = true;
|
|
||||||
|
|
||||||
// Moved this from the PrintHelper, the invert effect should probably be the last!
|
|
||||||
if (conf.OutputPrintInverted) {
|
|
||||||
printOutputSettings.Effects.Add(new InvertEffect());
|
|
||||||
}
|
}
|
||||||
|
if (printerSettings != null) {
|
||||||
Image imageToPrint;
|
exportInformation.ExportMade = true;
|
||||||
Boolean disposeImage = ImageOutput.CreateImageFromSurface(surface, printOutputSettings, out imageToPrint);
|
|
||||||
try {
|
|
||||||
if (!string.IsNullOrEmpty(printerName)) {
|
|
||||||
printerSettings = new PrintHelper(imageToPrint, captureDetails).PrintTo(printerName);
|
|
||||||
} else if (!manuallyInitiated) {
|
|
||||||
PrinterSettings settings = new PrinterSettings();
|
|
||||||
printerSettings = new PrintHelper(imageToPrint, captureDetails).PrintTo(settings.PrinterName);
|
|
||||||
} else {
|
|
||||||
printerSettings = new PrintHelper(imageToPrint, captureDetails).PrintWithDialog();
|
|
||||||
}
|
|
||||||
if (printerSettings != null) {
|
|
||||||
exportInformation.ExportMade = true;
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
if (disposeImage && imageToPrint != null) {
|
|
||||||
imageToPrint.Dispose();
|
|
||||||
imageToPrint = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ProcessExport(exportInformation, surface);
|
ProcessExport(exportInformation, surface);
|
||||||
|
|
377
Greenshot/Forms/PrintOptionsDialog.Designer.cs
generated
377
Greenshot/Forms/PrintOptionsDialog.Designer.cs
generated
|
@ -48,185 +48,203 @@ namespace Greenshot.Forms
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
this.checkbox_dontaskagain = new GreenshotPlugin.Controls.GreenshotCheckBox();
|
this.checkbox_dontaskagain = new GreenshotPlugin.Controls.GreenshotCheckBox();
|
||||||
this.checkboxAllowShrink = new GreenshotPlugin.Controls.GreenshotCheckBox();
|
this.checkboxAllowShrink = new GreenshotPlugin.Controls.GreenshotCheckBox();
|
||||||
this.checkboxAllowEnlarge = new GreenshotPlugin.Controls.GreenshotCheckBox();
|
this.checkboxAllowEnlarge = new GreenshotPlugin.Controls.GreenshotCheckBox();
|
||||||
this.checkboxAllowCenter = new GreenshotPlugin.Controls.GreenshotCheckBox();
|
this.checkboxAllowCenter = new GreenshotPlugin.Controls.GreenshotCheckBox();
|
||||||
this.checkboxAllowRotate = new GreenshotPlugin.Controls.GreenshotCheckBox();
|
this.checkboxAllowRotate = new GreenshotPlugin.Controls.GreenshotCheckBox();
|
||||||
this.button_ok = new GreenshotPlugin.Controls.GreenshotButton();
|
this.button_ok = new GreenshotPlugin.Controls.GreenshotButton();
|
||||||
this.checkboxDateTime = new GreenshotPlugin.Controls.GreenshotCheckBox();
|
this.checkboxDateTime = new GreenshotPlugin.Controls.GreenshotCheckBox();
|
||||||
this.button_cancel = new GreenshotPlugin.Controls.GreenshotButton();
|
this.button_cancel = new GreenshotPlugin.Controls.GreenshotButton();
|
||||||
this.checkboxPrintInverted = new GreenshotPlugin.Controls.GreenshotCheckBox();
|
this.checkboxPrintInverted = new GreenshotPlugin.Controls.GreenshotCheckBox();
|
||||||
this.checkbox_grayscale = new GreenshotPlugin.Controls.GreenshotCheckBox();
|
this.checkbox_grayscale = new GreenshotPlugin.Controls.GreenshotCheckBox();
|
||||||
this.SuspendLayout();
|
this.checkbox_monochrome = new GreenshotPlugin.Controls.GreenshotCheckBox();
|
||||||
//
|
this.SuspendLayout();
|
||||||
// checkbox_dontaskagain
|
//
|
||||||
//
|
// checkbox_dontaskagain
|
||||||
this.checkbox_dontaskagain.AutoSize = true;
|
//
|
||||||
this.checkbox_dontaskagain.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkbox_dontaskagain.AutoSize = true;
|
||||||
this.checkbox_dontaskagain.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkbox_dontaskagain.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.checkbox_dontaskagain.LanguageKey = "printoptions_dontaskagain";
|
this.checkbox_dontaskagain.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.checkbox_dontaskagain.Location = new System.Drawing.Point(12, 191);
|
this.checkbox_dontaskagain.LanguageKey = "printoptions_dontaskagain";
|
||||||
this.checkbox_dontaskagain.Name = "checkbox_dontaskagain";
|
this.checkbox_dontaskagain.Location = new System.Drawing.Point(12, 214);
|
||||||
this.checkbox_dontaskagain.Size = new System.Drawing.Size(240, 17);
|
this.checkbox_dontaskagain.Name = "checkbox_dontaskagain";
|
||||||
this.checkbox_dontaskagain.TabIndex = 19;
|
this.checkbox_dontaskagain.Size = new System.Drawing.Size(240, 17);
|
||||||
this.checkbox_dontaskagain.Text = "Save options as default and do not ask again";
|
this.checkbox_dontaskagain.TabIndex = 19;
|
||||||
this.checkbox_dontaskagain.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkbox_dontaskagain.Text = "Save options as default and do not ask again";
|
||||||
this.checkbox_dontaskagain.UseVisualStyleBackColor = true;
|
this.checkbox_dontaskagain.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
//
|
this.checkbox_dontaskagain.UseVisualStyleBackColor = true;
|
||||||
// checkboxAllowShrink
|
//
|
||||||
//
|
// checkboxAllowShrink
|
||||||
this.checkboxAllowShrink.AutoSize = true;
|
//
|
||||||
this.checkboxAllowShrink.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkboxAllowShrink.AutoSize = true;
|
||||||
this.checkboxAllowShrink.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkboxAllowShrink.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.checkboxAllowShrink.LanguageKey = "printoptions_allowshrink";
|
this.checkboxAllowShrink.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.checkboxAllowShrink.Location = new System.Drawing.Point(12, 20);
|
this.checkboxAllowShrink.LanguageKey = "printoptions_allowshrink";
|
||||||
this.checkboxAllowShrink.Name = "checkboxAllowShrink";
|
this.checkboxAllowShrink.Location = new System.Drawing.Point(12, 20);
|
||||||
this.checkboxAllowShrink.PropertyName = "OutputPrintAllowShrink";
|
this.checkboxAllowShrink.Name = "checkboxAllowShrink";
|
||||||
this.checkboxAllowShrink.Size = new System.Drawing.Size(168, 17);
|
this.checkboxAllowShrink.PropertyName = "OutputPrintAllowShrink";
|
||||||
this.checkboxAllowShrink.TabIndex = 21;
|
this.checkboxAllowShrink.Size = new System.Drawing.Size(168, 17);
|
||||||
this.checkboxAllowShrink.Text = "Shrink printout to fit paper size";
|
this.checkboxAllowShrink.TabIndex = 21;
|
||||||
this.checkboxAllowShrink.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkboxAllowShrink.Text = "Shrink printout to fit paper size";
|
||||||
this.checkboxAllowShrink.UseVisualStyleBackColor = true;
|
this.checkboxAllowShrink.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
//
|
this.checkboxAllowShrink.UseVisualStyleBackColor = true;
|
||||||
// checkboxAllowEnlarge
|
//
|
||||||
//
|
// checkboxAllowEnlarge
|
||||||
this.checkboxAllowEnlarge.AutoSize = true;
|
//
|
||||||
this.checkboxAllowEnlarge.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkboxAllowEnlarge.AutoSize = true;
|
||||||
this.checkboxAllowEnlarge.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkboxAllowEnlarge.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.checkboxAllowEnlarge.LanguageKey = "printoptions_allowenlarge";
|
this.checkboxAllowEnlarge.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.checkboxAllowEnlarge.Location = new System.Drawing.Point(12, 43);
|
this.checkboxAllowEnlarge.LanguageKey = "printoptions_allowenlarge";
|
||||||
this.checkboxAllowEnlarge.Name = "checkboxAllowEnlarge";
|
this.checkboxAllowEnlarge.Location = new System.Drawing.Point(12, 43);
|
||||||
this.checkboxAllowEnlarge.PropertyName = "OutputPrintAllowEnlarge";
|
this.checkboxAllowEnlarge.Name = "checkboxAllowEnlarge";
|
||||||
this.checkboxAllowEnlarge.Size = new System.Drawing.Size(174, 17);
|
this.checkboxAllowEnlarge.PropertyName = "OutputPrintAllowEnlarge";
|
||||||
this.checkboxAllowEnlarge.TabIndex = 22;
|
this.checkboxAllowEnlarge.Size = new System.Drawing.Size(174, 17);
|
||||||
this.checkboxAllowEnlarge.Text = "Enlarge printout to fit paper size";
|
this.checkboxAllowEnlarge.TabIndex = 22;
|
||||||
this.checkboxAllowEnlarge.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkboxAllowEnlarge.Text = "Enlarge printout to fit paper size";
|
||||||
this.checkboxAllowEnlarge.UseVisualStyleBackColor = true;
|
this.checkboxAllowEnlarge.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
//
|
this.checkboxAllowEnlarge.UseVisualStyleBackColor = true;
|
||||||
// checkboxAllowCenter
|
//
|
||||||
//
|
// checkboxAllowCenter
|
||||||
this.checkboxAllowCenter.AutoSize = true;
|
//
|
||||||
this.checkboxAllowCenter.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkboxAllowCenter.AutoSize = true;
|
||||||
this.checkboxAllowCenter.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkboxAllowCenter.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.checkboxAllowCenter.LanguageKey = "printoptions_allowcenter";
|
this.checkboxAllowCenter.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.checkboxAllowCenter.Location = new System.Drawing.Point(12, 89);
|
this.checkboxAllowCenter.LanguageKey = "printoptions_allowcenter";
|
||||||
this.checkboxAllowCenter.Name = "checkboxAllowCenter";
|
this.checkboxAllowCenter.Location = new System.Drawing.Point(12, 89);
|
||||||
this.checkboxAllowCenter.PropertyName = "OutputPrintCenter";
|
this.checkboxAllowCenter.Name = "checkboxAllowCenter";
|
||||||
this.checkboxAllowCenter.Size = new System.Drawing.Size(137, 17);
|
this.checkboxAllowCenter.PropertyName = "OutputPrintCenter";
|
||||||
this.checkboxAllowCenter.TabIndex = 24;
|
this.checkboxAllowCenter.Size = new System.Drawing.Size(137, 17);
|
||||||
this.checkboxAllowCenter.Text = "Center printout on page";
|
this.checkboxAllowCenter.TabIndex = 24;
|
||||||
this.checkboxAllowCenter.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkboxAllowCenter.Text = "Center printout on page";
|
||||||
this.checkboxAllowCenter.UseVisualStyleBackColor = true;
|
this.checkboxAllowCenter.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
//
|
this.checkboxAllowCenter.UseVisualStyleBackColor = true;
|
||||||
// checkboxAllowRotate
|
//
|
||||||
//
|
// checkboxAllowRotate
|
||||||
this.checkboxAllowRotate.AutoSize = true;
|
//
|
||||||
this.checkboxAllowRotate.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkboxAllowRotate.AutoSize = true;
|
||||||
this.checkboxAllowRotate.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkboxAllowRotate.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.checkboxAllowRotate.LanguageKey = "printoptions_allowrotate";
|
this.checkboxAllowRotate.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.checkboxAllowRotate.Location = new System.Drawing.Point(12, 66);
|
this.checkboxAllowRotate.LanguageKey = "printoptions_allowrotate";
|
||||||
this.checkboxAllowRotate.Name = "checkboxAllowRotate";
|
this.checkboxAllowRotate.Location = new System.Drawing.Point(12, 66);
|
||||||
this.checkboxAllowRotate.PropertyName = "OutputPrintAllowRotate";
|
this.checkboxAllowRotate.Name = "checkboxAllowRotate";
|
||||||
this.checkboxAllowRotate.Size = new System.Drawing.Size(187, 17);
|
this.checkboxAllowRotate.PropertyName = "OutputPrintAllowRotate";
|
||||||
this.checkboxAllowRotate.TabIndex = 23;
|
this.checkboxAllowRotate.Size = new System.Drawing.Size(187, 17);
|
||||||
this.checkboxAllowRotate.Text = "Rotate printout to page orientation";
|
this.checkboxAllowRotate.TabIndex = 23;
|
||||||
this.checkboxAllowRotate.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkboxAllowRotate.Text = "Rotate printout to page orientation";
|
||||||
this.checkboxAllowRotate.UseVisualStyleBackColor = true;
|
this.checkboxAllowRotate.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
//
|
this.checkboxAllowRotate.UseVisualStyleBackColor = true;
|
||||||
// button_ok
|
//
|
||||||
//
|
// button_ok
|
||||||
this.button_ok.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
//
|
||||||
this.button_ok.DialogResult = System.Windows.Forms.DialogResult.OK;
|
this.button_ok.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.button_ok.LanguageKey = "OK";
|
this.button_ok.DialogResult = System.Windows.Forms.DialogResult.OK;
|
||||||
this.button_ok.Location = new System.Drawing.Point(187, 224);
|
this.button_ok.LanguageKey = "OK";
|
||||||
this.button_ok.Name = "button_ok";
|
this.button_ok.Location = new System.Drawing.Point(187, 267);
|
||||||
this.button_ok.Size = new System.Drawing.Size(75, 23);
|
this.button_ok.Name = "button_ok";
|
||||||
this.button_ok.TabIndex = 25;
|
this.button_ok.Size = new System.Drawing.Size(75, 23);
|
||||||
this.button_ok.Text = "OK";
|
this.button_ok.TabIndex = 25;
|
||||||
this.button_ok.UseVisualStyleBackColor = true;
|
this.button_ok.Text = "Ok";
|
||||||
this.button_ok.Click += new System.EventHandler(this.Button_okClick);
|
this.button_ok.UseVisualStyleBackColor = true;
|
||||||
//
|
this.button_ok.Click += new System.EventHandler(this.Button_okClick);
|
||||||
// checkboxDateTime
|
//
|
||||||
//
|
// checkboxDateTime
|
||||||
this.checkboxDateTime.AutoSize = true;
|
//
|
||||||
this.checkboxDateTime.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkboxDateTime.AutoSize = true;
|
||||||
this.checkboxDateTime.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkboxDateTime.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.checkboxDateTime.LanguageKey = "printoptions_timestamp";
|
this.checkboxDateTime.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.checkboxDateTime.Location = new System.Drawing.Point(12, 112);
|
this.checkboxDateTime.LanguageKey = "printoptions_timestamp";
|
||||||
this.checkboxDateTime.Name = "checkboxDateTime";
|
this.checkboxDateTime.Location = new System.Drawing.Point(12, 112);
|
||||||
this.checkboxDateTime.PropertyName = "OutputPrintFooter";
|
this.checkboxDateTime.Name = "checkboxDateTime";
|
||||||
this.checkboxDateTime.Size = new System.Drawing.Size(187, 17);
|
this.checkboxDateTime.PropertyName = "OutputPrintFooter";
|
||||||
this.checkboxDateTime.TabIndex = 26;
|
this.checkboxDateTime.Size = new System.Drawing.Size(187, 17);
|
||||||
this.checkboxDateTime.Text = "Print date / time at bottom of page";
|
this.checkboxDateTime.TabIndex = 26;
|
||||||
this.checkboxDateTime.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkboxDateTime.Text = "Print date / time at bottom of page";
|
||||||
this.checkboxDateTime.UseVisualStyleBackColor = true;
|
this.checkboxDateTime.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
//
|
this.checkboxDateTime.UseVisualStyleBackColor = true;
|
||||||
// button_cancel
|
//
|
||||||
//
|
// button_cancel
|
||||||
this.button_cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
//
|
||||||
this.button_cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
this.button_cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.button_cancel.LanguageKey = "CANCEL";
|
this.button_cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||||
this.button_cancel.Location = new System.Drawing.Point(268, 224);
|
this.button_cancel.LanguageKey = "CANCEL";
|
||||||
this.button_cancel.Name = "button_cancel";
|
this.button_cancel.Location = new System.Drawing.Point(268, 267);
|
||||||
this.button_cancel.Size = new System.Drawing.Size(75, 23);
|
this.button_cancel.Name = "button_cancel";
|
||||||
this.button_cancel.TabIndex = 27;
|
this.button_cancel.Size = new System.Drawing.Size(75, 23);
|
||||||
this.button_cancel.Text = "Cancel";
|
this.button_cancel.TabIndex = 27;
|
||||||
this.button_cancel.UseVisualStyleBackColor = true;
|
this.button_cancel.Text = "Cancel";
|
||||||
//
|
this.button_cancel.UseVisualStyleBackColor = true;
|
||||||
// checkboxPrintInverted
|
//
|
||||||
//
|
// checkboxPrintInverted
|
||||||
this.checkboxPrintInverted.AutoSize = true;
|
//
|
||||||
this.checkboxPrintInverted.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkboxPrintInverted.AutoSize = true;
|
||||||
this.checkboxPrintInverted.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkboxPrintInverted.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.checkboxPrintInverted.LanguageKey = "printoptions_inverted";
|
this.checkboxPrintInverted.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.checkboxPrintInverted.Location = new System.Drawing.Point(12, 135);
|
this.checkboxPrintInverted.LanguageKey = "printoptions_inverted";
|
||||||
this.checkboxPrintInverted.Name = "checkboxPrintInverted";
|
this.checkboxPrintInverted.Location = new System.Drawing.Point(12, 135);
|
||||||
this.checkboxPrintInverted.PropertyName = "OutputPrintInverted";
|
this.checkboxPrintInverted.Name = "checkboxPrintInverted";
|
||||||
this.checkboxPrintInverted.Size = new System.Drawing.Size(141, 17);
|
this.checkboxPrintInverted.PropertyName = "OutputPrintInverted";
|
||||||
this.checkboxPrintInverted.TabIndex = 28;
|
this.checkboxPrintInverted.Size = new System.Drawing.Size(141, 17);
|
||||||
this.checkboxPrintInverted.Text = "Print with inverted colors";
|
this.checkboxPrintInverted.TabIndex = 28;
|
||||||
this.checkboxPrintInverted.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkboxPrintInverted.Text = "Print with inverted colors";
|
||||||
this.checkboxPrintInverted.UseVisualStyleBackColor = true;
|
this.checkboxPrintInverted.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
//
|
this.checkboxPrintInverted.UseVisualStyleBackColor = true;
|
||||||
// checkbox_grayscale
|
//
|
||||||
//
|
// checkbox_grayscale
|
||||||
this.checkbox_grayscale.AutoSize = true;
|
//
|
||||||
this.checkbox_grayscale.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkbox_grayscale.AutoSize = true;
|
||||||
this.checkbox_grayscale.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkbox_grayscale.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.checkbox_grayscale.LanguageKey = "printoptions_printgrayscale";
|
this.checkbox_grayscale.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.checkbox_grayscale.Location = new System.Drawing.Point(12, 158);
|
this.checkbox_grayscale.LanguageKey = "printoptions_printgrayscale";
|
||||||
this.checkbox_grayscale.Name = "checkbox_grayscale";
|
this.checkbox_grayscale.Location = new System.Drawing.Point(12, 158);
|
||||||
this.checkbox_grayscale.PropertyName = "OutputPrintGrayscale";
|
this.checkbox_grayscale.Name = "checkbox_grayscale";
|
||||||
this.checkbox_grayscale.Size = new System.Drawing.Size(138, 17);
|
this.checkbox_grayscale.PropertyName = "OutputPrintGrayscale";
|
||||||
this.checkbox_grayscale.TabIndex = 29;
|
this.checkbox_grayscale.Size = new System.Drawing.Size(138, 17);
|
||||||
this.checkbox_grayscale.Text = "Force grayscale printing";
|
this.checkbox_grayscale.TabIndex = 29;
|
||||||
this.checkbox_grayscale.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
this.checkbox_grayscale.Text = "Force grayscale printing";
|
||||||
this.checkbox_grayscale.UseVisualStyleBackColor = true;
|
this.checkbox_grayscale.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
//
|
this.checkbox_grayscale.UseVisualStyleBackColor = true;
|
||||||
// PrintOptionsDialog
|
//
|
||||||
//
|
// checkbox_monochrome
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
//
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
this.checkbox_monochrome.AutoSize = true;
|
||||||
this.ClientSize = new System.Drawing.Size(355, 259);
|
this.checkbox_monochrome.CheckAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.Controls.Add(this.checkbox_grayscale);
|
this.checkbox_monochrome.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.Controls.Add(this.checkboxPrintInverted);
|
this.checkbox_monochrome.LanguageKey = "printoptions_printmonochrome";
|
||||||
this.Controls.Add(this.button_cancel);
|
this.checkbox_monochrome.Location = new System.Drawing.Point(12, 181);
|
||||||
this.Controls.Add(this.checkboxDateTime);
|
this.checkbox_monochrome.Name = "checkbox_monochrome";
|
||||||
this.Controls.Add(this.button_ok);
|
this.checkbox_monochrome.PropertyName = "OutputPrintMonochrome";
|
||||||
this.Controls.Add(this.checkbox_dontaskagain);
|
this.checkbox_monochrome.Size = new System.Drawing.Size(149, 17);
|
||||||
this.Controls.Add(this.checkboxAllowCenter);
|
this.checkbox_monochrome.TabIndex = 30;
|
||||||
this.Controls.Add(this.checkboxAllowRotate);
|
this.checkbox_monochrome.Text = "Force black/white printing";
|
||||||
this.Controls.Add(this.checkboxAllowEnlarge);
|
this.checkbox_monochrome.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||||
this.Controls.Add(this.checkboxAllowShrink);
|
this.checkbox_monochrome.UseVisualStyleBackColor = true;
|
||||||
this.LanguageKey = "printoptions_title";
|
//
|
||||||
this.MaximizeBox = false;
|
// PrintOptionsDialog
|
||||||
this.MinimizeBox = false;
|
//
|
||||||
this.Name = "PrintOptionsDialog";
|
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
||||||
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||||
this.Text = "Greenshot print options";
|
this.ClientSize = new System.Drawing.Size(355, 302);
|
||||||
this.ResumeLayout(false);
|
this.Controls.Add(this.checkbox_monochrome);
|
||||||
this.PerformLayout();
|
this.Controls.Add(this.checkbox_grayscale);
|
||||||
|
this.Controls.Add(this.checkboxPrintInverted);
|
||||||
|
this.Controls.Add(this.button_cancel);
|
||||||
|
this.Controls.Add(this.checkboxDateTime);
|
||||||
|
this.Controls.Add(this.button_ok);
|
||||||
|
this.Controls.Add(this.checkbox_dontaskagain);
|
||||||
|
this.Controls.Add(this.checkboxAllowCenter);
|
||||||
|
this.Controls.Add(this.checkboxAllowRotate);
|
||||||
|
this.Controls.Add(this.checkboxAllowEnlarge);
|
||||||
|
this.Controls.Add(this.checkboxAllowShrink);
|
||||||
|
this.LanguageKey = "printoptions_title";
|
||||||
|
this.MaximizeBox = false;
|
||||||
|
this.MinimizeBox = false;
|
||||||
|
this.Name = "PrintOptionsDialog";
|
||||||
|
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
|
||||||
|
this.Text = "Greenshot print options";
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
}
|
}
|
||||||
private GreenshotPlugin.Controls.GreenshotCheckBox checkbox_grayscale;
|
private GreenshotPlugin.Controls.GreenshotCheckBox checkbox_grayscale;
|
||||||
private GreenshotPlugin.Controls.GreenshotCheckBox checkboxPrintInverted;
|
private GreenshotPlugin.Controls.GreenshotCheckBox checkboxPrintInverted;
|
||||||
|
@ -238,5 +256,6 @@ namespace Greenshot.Forms
|
||||||
private GreenshotPlugin.Controls.GreenshotCheckBox checkboxAllowEnlarge;
|
private GreenshotPlugin.Controls.GreenshotCheckBox checkboxAllowEnlarge;
|
||||||
private GreenshotPlugin.Controls.GreenshotCheckBox checkboxAllowShrink;
|
private GreenshotPlugin.Controls.GreenshotCheckBox checkboxAllowShrink;
|
||||||
private GreenshotPlugin.Controls.GreenshotCheckBox checkbox_dontaskagain;
|
private GreenshotPlugin.Controls.GreenshotCheckBox checkbox_dontaskagain;
|
||||||
|
private GreenshotPlugin.Controls.GreenshotCheckBox checkbox_monochrome;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
2410
Greenshot/Forms/SettingsForm.Designer.cs
generated
2410
Greenshot/Forms/SettingsForm.Designer.cs
generated
File diff suppressed because it is too large
Load diff
|
@ -112,15 +112,15 @@
|
||||||
<value>2.0</value>
|
<value>2.0</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="reader">
|
<resheader name="reader">
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<metadata name="folderBrowserDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="folderBrowserDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>116, 17</value>
|
<value>116, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="colorButton_window_background.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="colorButton_window_background.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
|
iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
|
||||||
|
|
|
@ -29,6 +29,7 @@ using Greenshot.Forms;
|
||||||
using Greenshot.Plugin;
|
using Greenshot.Plugin;
|
||||||
using GreenshotPlugin.Core;
|
using GreenshotPlugin.Core;
|
||||||
using Greenshot.IniFile;
|
using Greenshot.IniFile;
|
||||||
|
using Greenshot.Core;
|
||||||
|
|
||||||
namespace Greenshot.Helpers {
|
namespace Greenshot.Helpers {
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -38,13 +39,13 @@ namespace Greenshot.Helpers {
|
||||||
private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(PrintHelper));
|
private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(PrintHelper));
|
||||||
private static CoreConfiguration conf = IniConfig.GetIniSection<CoreConfiguration>();
|
private static CoreConfiguration conf = IniConfig.GetIniSection<CoreConfiguration>();
|
||||||
|
|
||||||
private Image image;
|
private ISurface surface;
|
||||||
private ICaptureDetails captureDetails;
|
private ICaptureDetails captureDetails;
|
||||||
private PrintDocument printDocument = new PrintDocument();
|
private PrintDocument printDocument = new PrintDocument();
|
||||||
private PrintDialog printDialog = new PrintDialog();
|
private PrintDialog printDialog = new PrintDialog();
|
||||||
|
|
||||||
public PrintHelper(Image image, ICaptureDetails captureDetails) {
|
public PrintHelper(ISurface surface, ICaptureDetails captureDetails) {
|
||||||
this.image = image;
|
this.surface = surface;
|
||||||
this.captureDetails = captureDetails;
|
this.captureDetails = captureDetails;
|
||||||
printDialog.UseEXDialog = true;
|
printDialog.UseEXDialog = true;
|
||||||
printDocument.DocumentName = FilenameHelper.GetFilenameWithoutExtensionFromPattern(conf.OutputFileFilenamePattern, captureDetails);
|
printDocument.DocumentName = FilenameHelper.GetFilenameWithoutExtensionFromPattern(conf.OutputFileFilenamePattern, captureDetails);
|
||||||
|
@ -74,8 +75,8 @@ namespace Greenshot.Helpers {
|
||||||
*/
|
*/
|
||||||
protected virtual void Dispose(bool disposing) {
|
protected virtual void Dispose(bool disposing) {
|
||||||
if (disposing) {
|
if (disposing) {
|
||||||
if (image != null) {
|
if (surface != null) {
|
||||||
image.Dispose();
|
surface.Dispose();
|
||||||
}
|
}
|
||||||
if (printDocument != null) {
|
if (printDocument != null) {
|
||||||
printDocument.Dispose();
|
printDocument.Dispose();
|
||||||
|
@ -84,7 +85,7 @@ namespace Greenshot.Helpers {
|
||||||
printDialog.Dispose();
|
printDialog.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
image = null;
|
surface = null;
|
||||||
printDocument = null;
|
printDocument = null;
|
||||||
printDialog = null;
|
printDialog = null;
|
||||||
}
|
}
|
||||||
|
@ -100,7 +101,7 @@ namespace Greenshot.Helpers {
|
||||||
try {
|
try {
|
||||||
if (printOptionsResult == null || printOptionsResult == DialogResult.OK) {
|
if (printOptionsResult == null || printOptionsResult == DialogResult.OK) {
|
||||||
printDocument.PrinterSettings.PrinterName = printerName;
|
printDocument.PrinterSettings.PrinterName = printerName;
|
||||||
if (conf.OutputPrintGrayscale) {
|
if (!IsColorPrint()) {
|
||||||
printDocument.DefaultPageSettings.Color = false;
|
printDocument.DefaultPageSettings.Color = false;
|
||||||
}
|
}
|
||||||
printDocument.Print();
|
printDocument.Print();
|
||||||
|
@ -110,8 +111,8 @@ namespace Greenshot.Helpers {
|
||||||
LOG.Error("An error ocurred while trying to print", e);
|
LOG.Error("An error ocurred while trying to print", e);
|
||||||
MessageBox.Show(Language.GetString(LangKey.print_error), Language.GetString(LangKey.error));
|
MessageBox.Show(Language.GetString(LangKey.print_error), Language.GetString(LangKey.error));
|
||||||
}
|
}
|
||||||
image.Dispose();
|
surface.Dispose();
|
||||||
image = null;
|
surface = null;
|
||||||
return returnPrinterSettings;
|
return returnPrinterSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,7 +127,7 @@ namespace Greenshot.Helpers {
|
||||||
DialogResult? printOptionsResult = ShowPrintOptionsDialog();
|
DialogResult? printOptionsResult = ShowPrintOptionsDialog();
|
||||||
try {
|
try {
|
||||||
if (printOptionsResult == null || printOptionsResult == DialogResult.OK) {
|
if (printOptionsResult == null || printOptionsResult == DialogResult.OK) {
|
||||||
if (conf.OutputPrintGrayscale) {
|
if (IsColorPrint()) {
|
||||||
printDocument.DefaultPageSettings.Color = false;
|
printDocument.DefaultPageSettings.Color = false;
|
||||||
}
|
}
|
||||||
printDocument.Print();
|
printDocument.Print();
|
||||||
|
@ -138,11 +139,15 @@ namespace Greenshot.Helpers {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
image.Dispose();
|
surface.Dispose();
|
||||||
image = null;
|
surface = null;
|
||||||
return returnPrinterSettings;
|
return returnPrinterSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool IsColorPrint() {
|
||||||
|
return !conf.OutputPrintGrayscale && !conf.OutputPrintMonochrome;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// display print options dialog (if the user has not configured Greenshot not to)
|
/// display print options dialog (if the user has not configured Greenshot not to)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -158,62 +163,95 @@ namespace Greenshot.Helpers {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawImageForPrint(object sender, PrintPageEventArgs e) {
|
void DrawImageForPrint(object sender, PrintPageEventArgs e) {
|
||||||
ContentAlignment alignment = conf.OutputPrintCenter ? ContentAlignment.MiddleCenter : ContentAlignment.TopLeft;
|
|
||||||
|
|
||||||
// prepare timestamp
|
// Create the output settins
|
||||||
float footerStringWidth = 0;
|
SurfaceOutputSettings printOutputSettings = new SurfaceOutputSettings(OutputFormat.png, 100, false);
|
||||||
float footerStringHeight = 0;
|
|
||||||
string footerString = null; //DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString();
|
ApplyEffects(printOutputSettings);
|
||||||
if (conf.OutputPrintFooter) {
|
|
||||||
footerString = FilenameHelper.FillPattern(conf.OutputPrintFooterPattern, captureDetails, false);
|
Image image;
|
||||||
using (Font f = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Regular)) {
|
Boolean disposeImage = ImageOutput.CreateImageFromSurface(surface, printOutputSettings, out image);
|
||||||
footerStringWidth = e.Graphics.MeasureString(footerString, f).Width;
|
try {
|
||||||
footerStringHeight = e.Graphics.MeasureString(footerString, f).Height;
|
ContentAlignment alignment = conf.OutputPrintCenter ? ContentAlignment.MiddleCenter : ContentAlignment.TopLeft;
|
||||||
|
|
||||||
|
// prepare timestamp
|
||||||
|
float footerStringWidth = 0;
|
||||||
|
float footerStringHeight = 0;
|
||||||
|
string footerString = null; //DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString();
|
||||||
|
if (conf.OutputPrintFooter) {
|
||||||
|
footerString = FilenameHelper.FillPattern(conf.OutputPrintFooterPattern, captureDetails, false);
|
||||||
|
using (Font f = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Regular)) {
|
||||||
|
footerStringWidth = e.Graphics.MeasureString(footerString, f).Width;
|
||||||
|
footerStringHeight = e.Graphics.MeasureString(footerString, f).Height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get a rectangle representing the printable Area
|
||||||
|
RectangleF pageRect = e.PageSettings.PrintableArea;
|
||||||
|
if(e.PageSettings.Landscape) {
|
||||||
|
float origWidth = pageRect.Width;
|
||||||
|
pageRect.Width = pageRect.Height;
|
||||||
|
pageRect.Height = origWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Subtract the dateString height from the available area, this way the area stays free
|
||||||
|
pageRect.Height -= footerStringHeight;
|
||||||
|
|
||||||
|
GraphicsUnit gu = GraphicsUnit.Pixel;
|
||||||
|
RectangleF imageRect = image.GetBounds(ref gu);
|
||||||
|
// rotate the image if it fits the page better
|
||||||
|
if (conf.OutputPrintAllowRotate) {
|
||||||
|
if ((pageRect.Width > pageRect.Height && imageRect.Width < imageRect.Height) || (pageRect.Width < pageRect.Height && imageRect.Width > imageRect.Height)) {
|
||||||
|
image.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
||||||
|
imageRect = image.GetBounds(ref gu);
|
||||||
|
if (alignment.Equals(ContentAlignment.TopLeft)) {
|
||||||
|
alignment = ContentAlignment.TopRight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RectangleF printRect = new RectangleF(0, 0, imageRect.Width, imageRect.Height);
|
||||||
|
// scale the image to fit the page better
|
||||||
|
if (conf.OutputPrintAllowEnlarge || conf.OutputPrintAllowShrink) {
|
||||||
|
SizeF resizedRect = ScaleHelper.GetScaledSize(imageRect.Size, pageRect.Size, false);
|
||||||
|
if ((conf.OutputPrintAllowShrink && resizedRect.Width < printRect.Width) || conf.OutputPrintAllowEnlarge && resizedRect.Width > printRect.Width) {
|
||||||
|
printRect.Size = resizedRect;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// align the image
|
||||||
|
printRect = ScaleHelper.GetAlignedRectangle(printRect, new RectangleF(0, 0, pageRect.Width, pageRect.Height), alignment);
|
||||||
|
if (conf.OutputPrintFooter) {
|
||||||
|
//printRect = new RectangleF(0, 0, printRect.Width, printRect.Height - (dateStringHeight * 2));
|
||||||
|
using (Font f = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Regular)) {
|
||||||
|
e.Graphics.DrawString(footerString, f, Brushes.Black, pageRect.Width / 2 - (footerStringWidth / 2), pageRect.Height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
e.Graphics.DrawImage(image, printRect, imageRect, GraphicsUnit.Pixel);
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
if (disposeImage && image != null) {
|
||||||
|
image.Dispose();
|
||||||
|
image = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get a rectangle representing the printable Area
|
|
||||||
RectangleF pageRect = e.PageSettings.PrintableArea;
|
|
||||||
if(e.PageSettings.Landscape) {
|
|
||||||
float origWidth = pageRect.Width;
|
|
||||||
pageRect.Width = pageRect.Height;
|
|
||||||
pageRect.Height = origWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Subtract the dateString height from the available area, this way the area stays free
|
|
||||||
pageRect.Height -= footerStringHeight;
|
|
||||||
|
|
||||||
GraphicsUnit gu = GraphicsUnit.Pixel;
|
|
||||||
RectangleF imageRect = image.GetBounds(ref gu);
|
|
||||||
// rotate the image if it fits the page better
|
|
||||||
if (conf.OutputPrintAllowRotate) {
|
|
||||||
if ((pageRect.Width > pageRect.Height && imageRect.Width < imageRect.Height) || (pageRect.Width < pageRect.Height && imageRect.Width > imageRect.Height)) {
|
|
||||||
image.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
||||||
imageRect = image.GetBounds(ref gu);
|
|
||||||
if (alignment.Equals(ContentAlignment.TopLeft)) {
|
|
||||||
alignment = ContentAlignment.TopRight;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RectangleF printRect = new RectangleF(0, 0, imageRect.Width, imageRect.Height);
|
|
||||||
// scale the image to fit the page better
|
|
||||||
if (conf.OutputPrintAllowEnlarge || conf.OutputPrintAllowShrink) {
|
|
||||||
SizeF resizedRect = ScaleHelper.GetScaledSize(imageRect.Size, pageRect.Size, false);
|
|
||||||
if ((conf.OutputPrintAllowShrink && resizedRect.Width < printRect.Width) || conf.OutputPrintAllowEnlarge && resizedRect.Width > printRect.Width) {
|
|
||||||
printRect.Size = resizedRect;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// align the image
|
|
||||||
printRect = ScaleHelper.GetAlignedRectangle(printRect, new RectangleF(0, 0, pageRect.Width, pageRect.Height), alignment);
|
|
||||||
if (conf.OutputPrintFooter) {
|
|
||||||
//printRect = new RectangleF(0, 0, printRect.Width, printRect.Height - (dateStringHeight * 2));
|
|
||||||
using (Font f = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Regular)) {
|
|
||||||
e.Graphics.DrawString(footerString, f, Brushes.Black, pageRect.Width / 2 - (footerStringWidth / 2), pageRect.Height);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
e.Graphics.DrawImage(image, printRect, imageRect, GraphicsUnit.Pixel);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ApplyEffects(SurfaceOutputSettings printOutputSettings)
|
||||||
|
{
|
||||||
|
// TODO:
|
||||||
|
// add effects here
|
||||||
|
if (conf.OutputPrintMonochrome) {
|
||||||
|
byte threshold = conf.OutputPrintMonochromeThreshold;
|
||||||
|
printOutputSettings.Effects.Add(new MonochromeEffect(threshold));
|
||||||
|
printOutputSettings.ReduceColors = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// the invert effect should probably be the last
|
||||||
|
if (conf.OutputPrintInverted) {
|
||||||
|
printOutputSettings.Effects.Add(new InvertEffect());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,18 +5,18 @@
|
||||||
<resource name="about_donations">If you like Greenshot, you are welcome to support us:</resource>
|
<resource name="about_donations">If you like Greenshot, you are welcome to support us:</resource>
|
||||||
<resource name="about_host">Greenshot is hosted by sourceforge.net at</resource>
|
<resource name="about_host">Greenshot is hosted by sourceforge.net at</resource>
|
||||||
<resource name="about_icons">Icons from Yusuke Kamiyamane's Fugue icon set (Creative Commons Attribution 3.0 license)</resource>
|
<resource name="about_icons">Icons from Yusuke Kamiyamane's Fugue icon set (Creative Commons Attribution 3.0 license)</resource>
|
||||||
<resource name="about_license">Copyright (C) 2007-2013 Thomas Braun, Jens Klingen, Robin Krom
|
<resource name="about_license">Copyright (C) 2007-2013 Thomas Braun, Jens Klingen, Robin Krom
|
||||||
Greenshot comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions.
|
Greenshot comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions.
|
||||||
Details about the GNU General Public License:</resource>
|
Details about the GNU General Public License:</resource>
|
||||||
<resource name="about_title">About Greenshot</resource>
|
<resource name="about_title">About Greenshot</resource>
|
||||||
<resource name="application_title">Greenshot - the revolutionary screenshot utility</resource>
|
<resource name="application_title">Greenshot - the revolutionary screenshot utility</resource>
|
||||||
<resource name="bugreport_cancel">Close</resource>
|
<resource name="bugreport_cancel">Close</resource>
|
||||||
<resource name="bugreport_info">Sorry, an unexpected error occured.
|
<resource name="bugreport_info">Sorry, an unexpected error occured.
|
||||||
|
|
||||||
The good news is: you can help us getting rid of it by filing a bug report.
|
The good news is: you can help us getting rid of it by filing a bug report.
|
||||||
Please visit the URL below, create a new bug report and paste the contents from the text area into the description.
|
Please visit the URL below, create a new bug report and paste the contents from the text area into the description.
|
||||||
|
|
||||||
Please add a meaningful summary and enclose any information you consider to be helpful for reproducing the issue.
|
Please add a meaningful summary and enclose any information you consider to be helpful for reproducing the issue.
|
||||||
Also, we would highly appreciate if you checked whether a tracker item already exists for this bug. (You can use the search to find those quickly.) Thank you :)</resource>
|
Also, we would highly appreciate if you checked whether a tracker item already exists for this bug. (You can use the search to find those quickly.) Thank you :)</resource>
|
||||||
<resource name="bugreport_title">Error</resource>
|
<resource name="bugreport_title">Error</resource>
|
||||||
<resource name="CANCEL">Cancel</resource>
|
<resource name="CANCEL">Cancel</resource>
|
||||||
|
@ -167,7 +167,7 @@ Also, we would highly appreciate if you checked whether a tracker item already e
|
||||||
<resource name="EmailFormat.OUTLOOK_TXT">Outlook with text</resource>
|
<resource name="EmailFormat.OUTLOOK_TXT">Outlook with text</resource>
|
||||||
<resource name="error">Error</resource>
|
<resource name="error">Error</resource>
|
||||||
<resource name="error_multipleinstances">An instance of Greenshot is already running.</resource>
|
<resource name="error_multipleinstances">An instance of Greenshot is already running.</resource>
|
||||||
<resource name="error_nowriteaccess">Cannot save file to {0}.
|
<resource name="error_nowriteaccess">Cannot save file to {0}.
|
||||||
Please check write accessibility of the selected storage location.</resource>
|
Please check write accessibility of the selected storage location.</resource>
|
||||||
<resource name="error_openfile">The file "{0}" could not be opened.</resource>
|
<resource name="error_openfile">The file "{0}" could not be opened.</resource>
|
||||||
<resource name="error_openlink">Could not open link '{0}'.</resource>
|
<resource name="error_openlink">Could not open link '{0}'.</resource>
|
||||||
|
@ -198,7 +198,8 @@ Please check write accessibility of the selected storage location.</resource>
|
||||||
<resource name="printoptions_dontaskagain">Save options as default and do not ask again</resource>
|
<resource name="printoptions_dontaskagain">Save options as default and do not ask again</resource>
|
||||||
<resource name="printoptions_inverted">Print with inverted colors</resource>
|
<resource name="printoptions_inverted">Print with inverted colors</resource>
|
||||||
<resource name="printoptions_printgrayscale">Force grayscale printing</resource>
|
<resource name="printoptions_printgrayscale">Force grayscale printing</resource>
|
||||||
<resource name="printoptions_timestamp">Print date / time at bottom of page</resource>
|
<resource name="printoptions_printmonochrome">Force black/white printing</resource>
|
||||||
|
<resource name="printoptions_timestamp">Print date / time at bottom of page</resource>
|
||||||
<resource name="printoptions_title">Greenshot print options</resource>
|
<resource name="printoptions_title">Greenshot print options</resource>
|
||||||
<resource name="qualitydialog_dontaskagain">Save as default quality and do not ask again</resource>
|
<resource name="qualitydialog_dontaskagain">Save as default quality and do not ask again</resource>
|
||||||
<resource name="qualitydialog_title">Greenshot quality</resource>
|
<resource name="qualitydialog_title">Greenshot quality</resource>
|
||||||
|
@ -227,22 +228,22 @@ Please check write accessibility of the selected storage location.</resource>
|
||||||
<resource name="settings_iecapture">Internet Explorer capture</resource>
|
<resource name="settings_iecapture">Internet Explorer capture</resource>
|
||||||
<resource name="settings_jpegquality">JPEG quality</resource>
|
<resource name="settings_jpegquality">JPEG quality</resource>
|
||||||
<resource name="settings_language">Language</resource>
|
<resource name="settings_language">Language</resource>
|
||||||
<resource name="settings_message_filenamepattern">The following placeholders will be replaced automatically in the pattern defined:
|
<resource name="settings_message_filenamepattern">The following placeholders will be replaced automatically in the pattern defined:
|
||||||
${YYYY} year, 4 digits
|
${YYYY} year, 4 digits
|
||||||
${MM} month, 2 digits
|
${MM} month, 2 digits
|
||||||
${DD} day, 2 digits
|
${DD} day, 2 digits
|
||||||
${hh} hour, 2 digits
|
${hh} hour, 2 digits
|
||||||
${mm} minute, 2 digits
|
${mm} minute, 2 digits
|
||||||
${ss} second, 2 digits
|
${ss} second, 2 digits
|
||||||
${NUM} incrementing number, 6 digits
|
${NUM} incrementing number, 6 digits
|
||||||
${title} Window title
|
${title} Window title
|
||||||
${user} Windows user
|
${user} Windows user
|
||||||
${domain} Windows domain
|
${domain} Windows domain
|
||||||
${hostname} PC name
|
${hostname} PC name
|
||||||
|
|
||||||
You can also have Greenshot create directories dynamically, simply use the backslash symbol (\) to separate folders and filename.
|
You can also have Greenshot create directories dynamically, simply use the backslash symbol (\) to separate folders and filename.
|
||||||
Example: the pattern ${YYYY}-${MM}-${DD}\${hh}-${mm}-${ss}
|
Example: the pattern ${YYYY}-${MM}-${DD}\${hh}-${mm}-${ss}
|
||||||
will generate a folder for the current day in your default storage location, e.g. 2008-06-29, the contained screenshot file's name will be based on the current
|
will generate a folder for the current day in your default storage location, e.g. 2008-06-29, the contained screenshot file's name will be based on the current
|
||||||
time, e.g. 11_58_32 (plus extension defined in the settings)</resource>
|
time, e.g. 11_58_32 (plus extension defined in the settings)</resource>
|
||||||
<resource name="settings_network">Network and updates</resource>
|
<resource name="settings_network">Network and updates</resource>
|
||||||
<resource name="settings_output">Output</resource>
|
<resource name="settings_output">Output</resource>
|
||||||
|
@ -277,8 +278,8 @@ time, e.g. 11_58_32 (plus extension defined in the settings)</resource>
|
||||||
<resource name="update_found">A newer version of Greenshot is available! Do you want to download Greenshot {0}?</resource>
|
<resource name="update_found">A newer version of Greenshot is available! Do you want to download Greenshot {0}?</resource>
|
||||||
<resource name="wait_ie_capture">Please wait while the page in Internet Explorer is captured...</resource>
|
<resource name="wait_ie_capture">Please wait while the page in Internet Explorer is captured...</resource>
|
||||||
<resource name="warning">Warning</resource>
|
<resource name="warning">Warning</resource>
|
||||||
<resource name="warning_hotkeys">The hotkey(s) "{0}" could not be registered. This problem is probably caused by another tool claiming usage of the same hotkey(s)! You could either change your hotkey settings or deactivate/change the software making use of the hotkey(s).
|
<resource name="warning_hotkeys">The hotkey(s) "{0}" could not be registered. This problem is probably caused by another tool claiming usage of the same hotkey(s)! You could either change your hotkey settings or deactivate/change the software making use of the hotkey(s).
|
||||||
|
|
||||||
All Greenshot features still work directly from the tray icon context menu without hotkeys.</resource>
|
All Greenshot features still work directly from the tray icon context menu without hotkeys.</resource>
|
||||||
<resource name="WindowCaptureMode.Aero">Use custom color</resource>
|
<resource name="WindowCaptureMode.Aero">Use custom color</resource>
|
||||||
<resource name="WindowCaptureMode.AeroTransparent">Preserve transparency</resource>
|
<resource name="WindowCaptureMode.AeroTransparent">Preserve transparency</resource>
|
||||||
|
|
|
@ -11,6 +11,7 @@ Features:
|
||||||
* General: Added Special-Folder support for the OutputPath/Filenames, now one can use the following values: MyPictures, MyMusic, MyDocuments, Personal, Desktop, ApplicationData, LocalApplicationData. Meaning one can now set the output path to e.g. ${MyPictures}
|
* General: Added Special-Folder support for the OutputPath/Filenames, now one can use the following values: MyPictures, MyMusic, MyDocuments, Personal, Desktop, ApplicationData, LocalApplicationData. Meaning one can now set the output path to e.g. ${MyPictures}
|
||||||
* Editor: The capture is now displayed in the center of the editor, the code for this was supplied by Viktar Karpach.
|
* Editor: The capture is now displayed in the center of the editor, the code for this was supplied by Viktar Karpach.
|
||||||
* Editor: Added horizontal and vertical alignment for text boxes.
|
* Editor: Added horizontal and vertical alignment for text boxes.
|
||||||
|
* Printing: Added option to force monochrome (black/white) print
|
||||||
* Plug-in: Added Photobucket plugin
|
* Plug-in: Added Photobucket plugin
|
||||||
* Plug-in: Removed unneeded code from the Confluence Plug-in, this makes the Greenshot installer / .zip a bit smaller.
|
* Plug-in: Removed unneeded code from the Confluence Plug-in, this makes the Greenshot installer / .zip a bit smaller.
|
||||||
|
|
||||||
|
|
|
@ -137,9 +137,13 @@ namespace GreenshotPlugin.Core {
|
||||||
public bool OutputPrintCenter;
|
public bool OutputPrintCenter;
|
||||||
[IniProperty("OutputPrintInverted", LanguageKey="printoptions_inverted", Description="Print image inverted (use e.g. for console captures)", DefaultValue="false")]
|
[IniProperty("OutputPrintInverted", LanguageKey="printoptions_inverted", Description="Print image inverted (use e.g. for console captures)", DefaultValue="false")]
|
||||||
public bool OutputPrintInverted;
|
public bool OutputPrintInverted;
|
||||||
[IniProperty("OutputPrintGrayscale", LanguageKey = "printoptions_printgrayscale", Description = "Force grayscale printing", DefaultValue = "false")]
|
[IniProperty("OutputPrintGrayscale", LanguageKey = "printoptions_printgrayscale", Description = "Force grayscale printing", DefaultValue = "false")]
|
||||||
public bool OutputPrintGrayscale;
|
public bool OutputPrintGrayscale;
|
||||||
[IniProperty("OutputPrintFooter", LanguageKey = "printoptions_timestamp", Description = "Print footer on print?", DefaultValue = "true")]
|
[IniProperty("OutputPrintMonochrome", LanguageKey = "printoptions_printmonochrome", Description = "Force monorchrome printing", DefaultValue = "false")]
|
||||||
|
public bool OutputPrintMonochrome;
|
||||||
|
[IniProperty("OutputPrintMonochromeThreshold", Description = "Threshold for monochrome filter (0 - 255), lower value means less black", DefaultValue = "127")]
|
||||||
|
public byte OutputPrintMonochromeThreshold;
|
||||||
|
[IniProperty("OutputPrintFooter", LanguageKey = "printoptions_timestamp", Description = "Print footer on print?", DefaultValue = "true")]
|
||||||
public bool OutputPrintFooter;
|
public bool OutputPrintFooter;
|
||||||
[IniProperty("OutputPrintFooterPattern", Description = "Footer pattern", DefaultValue = "${capturetime:d\"D\"} ${capturetime:d\"T\"} - ${title}")]
|
[IniProperty("OutputPrintFooterPattern", Description = "Footer pattern", DefaultValue = "${capturetime:d\"D\"} ${capturetime:d\"T\"} - ${title}")]
|
||||||
public string OutputPrintFooterPattern;
|
public string OutputPrintFooterPattern;
|
||||||
|
|
|
@ -105,9 +105,14 @@ namespace Greenshot.Core {
|
||||||
/// MonochromeEffect
|
/// MonochromeEffect
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class MonochromeEffect : IEffect {
|
public class MonochromeEffect : IEffect {
|
||||||
|
private byte threshold;
|
||||||
|
/// <param name="threshold">Threshold for monochrome filter (0 - 255), lower value means less black</param>
|
||||||
|
public MonochromeEffect(byte threshold) {
|
||||||
|
this.threshold = threshold;
|
||||||
|
}
|
||||||
public Image Apply(Image sourceImage, out Point offsetChange) {
|
public Image Apply(Image sourceImage, out Point offsetChange) {
|
||||||
offsetChange = Point.Empty;
|
offsetChange = Point.Empty;
|
||||||
return ImageHelper.CreateMonochrome(sourceImage);
|
return ImageHelper.CreateMonochrome(sourceImage, threshold);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -883,15 +883,16 @@ namespace GreenshotPlugin.Core {
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns a b/w of Bitmap
|
/// Returns a b/w of Bitmap
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="sourceImage">Bitmap to create a b/w off</param>
|
/// <param name="sourceImage">Bitmap to create a b/w of</param>
|
||||||
|
/// <param name="threshold">Threshold for monochrome filter (0 - 255), lower value means less black</param>
|
||||||
/// <returns>b/w bitmap</returns>
|
/// <returns>b/w bitmap</returns>
|
||||||
public static Bitmap CreateMonochrome(Image sourceImage) {
|
public static Bitmap CreateMonochrome(Image sourceImage, byte threshold) {
|
||||||
using (IFastBitmap fastBitmap = FastBitmap.CreateCloneOf(sourceImage, sourceImage.PixelFormat)) {
|
using (IFastBitmap fastBitmap = FastBitmap.CreateCloneOf(sourceImage, sourceImage.PixelFormat)) {
|
||||||
fastBitmap.Lock();
|
fastBitmap.Lock();
|
||||||
for (int y = 0; y < fastBitmap.Height; y++) {
|
for (int y = 0; y < fastBitmap.Height; y++) {
|
||||||
for (int x = 0; x < fastBitmap.Width; x++) {
|
for (int x = 0; x < fastBitmap.Width; x++) {
|
||||||
Color color = fastBitmap.GetColorAt(x, y);
|
Color color = fastBitmap.GetColorAt(x, y);
|
||||||
int colorBrightness = (color.R + color.G + color.B > 382) ? 255 : 0;
|
int colorBrightness = ((color.R + color.G + color.B) / 3 > threshold) ? 255 : 0;
|
||||||
Color monoColor = Color.FromArgb(color.A, colorBrightness, colorBrightness, colorBrightness);
|
Color monoColor = Color.FromArgb(color.A, colorBrightness, colorBrightness, colorBrightness);
|
||||||
fastBitmap.SetColorAt(x, y, monoColor);
|
fastBitmap.SetColorAt(x, y, monoColor);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue