mirror of
https://github.com/greenshot/greenshot
synced 2025-07-16 10:03:44 -07:00
Translations for the effects
git-svn-id: http://svn.code.sf.net/p/greenshot/code/trunk@1660 7dccd23d-a4a3-4e1f-8c07-b4c1b4018ab4
This commit is contained in:
parent
8471c79533
commit
5038d7d237
9 changed files with 205 additions and 64 deletions
|
@ -124,6 +124,10 @@ namespace Greenshot.Configuration {
|
|||
editor_selectall,
|
||||
editor_senttoprinter,
|
||||
editor_shadow,
|
||||
editor_torn_edge,
|
||||
editor_border,
|
||||
editor_grayscale,
|
||||
editor_effects,
|
||||
editor_storedtoclipboard,
|
||||
editor_thickness,
|
||||
editor_title,
|
||||
|
|
|
@ -110,7 +110,7 @@ namespace Greenshot.Destinations {
|
|||
// Effects
|
||||
if (conf.isExperimentalFeatureEnabled("Effects")) {
|
||||
menu.Items.Add(new ToolStripSeparator());
|
||||
ToolStripMenuItem effectItem = new ToolStripMenuItem("Effects");
|
||||
ToolStripMenuItem effectItem = new ToolStripMenuItem(lang.GetString(LangKey.editor_effects));
|
||||
menu.Items.Add(effectItem);
|
||||
effectItem.DropDownOpening += delegate {
|
||||
effectItem.DropDownItems.Clear();
|
||||
|
@ -127,17 +127,17 @@ namespace Greenshot.Destinations {
|
|||
effectSubItem.Click += delegate {
|
||||
surface.ApplyBitmapEffect(Effects.Shadow);
|
||||
};
|
||||
effectSubItem = new ToolStripMenuItem("Torn Edge");
|
||||
effectSubItem = new ToolStripMenuItem(lang.GetString(LangKey.editor_torn_edge));
|
||||
effectItem.DropDownItems.Add(effectSubItem);
|
||||
effectSubItem.Click += delegate {
|
||||
surface.ApplyBitmapEffect(Effects.TornEdge);
|
||||
};
|
||||
effectSubItem = new ToolStripMenuItem("Border");
|
||||
effectSubItem = new ToolStripMenuItem(lang.GetString(LangKey.editor_border));
|
||||
effectItem.DropDownItems.Add(effectSubItem);
|
||||
effectSubItem.Click += delegate {
|
||||
surface.ApplyBitmapEffect(Effects.Border);
|
||||
};
|
||||
effectSubItem = new ToolStripMenuItem("Grayscale");
|
||||
effectSubItem = new ToolStripMenuItem(lang.GetString(LangKey.editor_grayscale));
|
||||
effectItem.DropDownItems.Add(effectSubItem);
|
||||
effectSubItem.Click += delegate {
|
||||
surface.ApplyBitmapEffect(Effects.Grayscale);
|
||||
|
|
22
Greenshot/Forms/ImageEditorForm.Designer.cs
generated
22
Greenshot/Forms/ImageEditorForm.Designer.cs
generated
|
@ -168,8 +168,6 @@ namespace Greenshot {
|
|||
this.insert_window_toolstripmenuitem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.dimensionsLabel = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.autoCropToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tornEdgeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.shadowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripContainer1.BottomToolStripPanel.SuspendLayout();
|
||||
this.toolStripContainer1.ContentPanel.SuspendLayout();
|
||||
this.toolStripContainer1.LeftToolStripPanel.SuspendLayout();
|
||||
|
@ -451,22 +449,6 @@ namespace Greenshot {
|
|||
this.autoCropToolStripMenuItem.Text = "Auto Crop";
|
||||
this.autoCropToolStripMenuItem.Click += new System.EventHandler(this.AutoCropToolStripMenuItemClick);
|
||||
//
|
||||
// tornEdgeToolStripMenuItem
|
||||
//
|
||||
this.tornEdgeToolStripMenuItem.Name = "tornEdgeToolStripMenuItem";
|
||||
this.tornEdgeToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
|
||||
this.tornEdgeToolStripMenuItem.Text = "Torn Edge";
|
||||
this.tornEdgeToolStripMenuItem.Visible = false;
|
||||
this.tornEdgeToolStripMenuItem.Click += new System.EventHandler(this.TornEdgeToolStripMenuItemClick);
|
||||
//
|
||||
// shadowToolStripMenuItem
|
||||
//
|
||||
this.shadowToolStripMenuItem.Name = "shadowToolStripMenuItem";
|
||||
this.shadowToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
|
||||
this.shadowToolStripMenuItem.Text = "Shadow";
|
||||
this.shadowToolStripMenuItem.Visible = false;
|
||||
this.shadowToolStripMenuItem.Click += new System.EventHandler(this.ShadowToolStripMenuItemClick);
|
||||
//
|
||||
// editToolStripMenuItem
|
||||
//
|
||||
this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
|
@ -482,8 +464,6 @@ namespace Greenshot {
|
|||
this.preferencesToolStripMenuItem,
|
||||
this.toolStripSeparator5,
|
||||
this.autoCropToolStripMenuItem,
|
||||
this.tornEdgeToolStripMenuItem,
|
||||
this.shadowToolStripMenuItem,
|
||||
this.insert_window_toolstripmenuitem});
|
||||
this.editToolStripMenuItem.Name = "editToolStripMenuItem";
|
||||
this.editToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
|
||||
|
@ -1645,7 +1625,5 @@ namespace Greenshot {
|
|||
private Greenshot.Controls.ToolStripColorButton btnFillColor;
|
||||
private Greenshot.Controls.ToolStripColorButton btnLineColor;
|
||||
private System.Windows.Forms.ToolStripMenuItem autoCropToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem tornEdgeToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem shadowToolStripMenuItem;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -368,7 +368,6 @@ namespace Greenshot {
|
|||
this.arrowHeadNoneMenuItem.Text = lang.GetString(LangKey.editor_arrowheads_none);
|
||||
this.shadowButton.Text = lang.GetString(LangKey.editor_shadow);
|
||||
|
||||
|
||||
this.fontSizeLabel.Text = lang.GetString(LangKey.editor_fontsize);
|
||||
this.fontBoldButton.Text = lang.GetString(LangKey.editor_bold);
|
||||
this.fontItalicButton.Text = lang.GetString(LangKey.editor_italic);
|
||||
|
@ -380,10 +379,41 @@ namespace Greenshot {
|
|||
this.loadElementsToolStripMenuItem.Text = lang.GetString(LangKey.editor_load_objects);
|
||||
this.autoCropToolStripMenuItem.Text = lang.GetString(LangKey.editor_autocrop);
|
||||
if (coreConf.isExperimentalFeatureEnabled("Effects")) {
|
||||
this.shadowToolStripMenuItem.Text = lang.GetString(LangKey.editor_shadow);
|
||||
this.shadowToolStripMenuItem.Visible = true;
|
||||
this.tornEdgeToolStripMenuItem.Visible = true;
|
||||
this.editToolStripMenuItem.DropDownItems.Add(new ToolStripSeparator());
|
||||
ToolStripMenuItem effectItem = new ToolStripMenuItem(lang.GetString(LangKey.editor_effects));
|
||||
this.editToolStripMenuItem.DropDownItems.Add(effectItem);
|
||||
|
||||
ToolStripMenuItem effectSubItem;
|
||||
effectSubItem = new ToolStripMenuItem(lang.GetString(LangKey.editor_shadow));
|
||||
effectSubItem.Click += delegate {
|
||||
surface.ApplyBitmapEffect(Effects.Shadow);
|
||||
updateUndoRedoSurfaceDependencies();
|
||||
};
|
||||
effectItem.DropDownItems.Add(effectSubItem);
|
||||
|
||||
effectSubItem = new ToolStripMenuItem(lang.GetString(LangKey.editor_torn_edge));
|
||||
effectSubItem.Click += delegate {
|
||||
surface.ApplyBitmapEffect(Effects.TornEdge);
|
||||
updateUndoRedoSurfaceDependencies();
|
||||
};
|
||||
effectItem.DropDownItems.Add(effectSubItem);
|
||||
|
||||
effectSubItem = new ToolStripMenuItem(lang.GetString(LangKey.editor_border));
|
||||
effectSubItem.Click += delegate {
|
||||
surface.ApplyBitmapEffect(Effects.Border);
|
||||
updateUndoRedoSurfaceDependencies();
|
||||
};
|
||||
effectItem.DropDownItems.Add(effectSubItem);
|
||||
|
||||
effectSubItem = new ToolStripMenuItem(lang.GetString(LangKey.editor_grayscale));
|
||||
effectSubItem.Click += delegate {
|
||||
surface.ApplyBitmapEffect(Effects.Grayscale);
|
||||
updateUndoRedoSurfaceDependencies();
|
||||
};
|
||||
effectItem.DropDownItems.Add(effectSubItem);
|
||||
}
|
||||
this.editToolStripMenuItem.DropDownItems.Add(new ToolStripSeparator());
|
||||
this.editToolStripMenuItem.DropDownItems.Add(insert_window_toolstripmenuitem);
|
||||
}
|
||||
|
||||
public ISurface Surface {
|
||||
|
@ -1177,15 +1207,5 @@ namespace Greenshot {
|
|||
refreshFieldControls();
|
||||
}
|
||||
}
|
||||
|
||||
void TornEdgeToolStripMenuItemClick(object sender, EventArgs e) {
|
||||
surface.ApplyBitmapEffect(Effects.TornEdge);
|
||||
updateUndoRedoSurfaceDependencies();
|
||||
}
|
||||
|
||||
void ShadowToolStripMenuItemClick(object sender, EventArgs e) {
|
||||
surface.ApplyBitmapEffect(Effects.Shadow);
|
||||
updateUndoRedoSurfaceDependencies();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -463,19 +463,31 @@ Zeit, z.B. 11_58_32 (plus Dateinamenerweiterung wie in den Einstellungen definie
|
|||
<resource name="editor_preview_quality">
|
||||
Vorschauqualität
|
||||
</resource>
|
||||
<resource name="editor_magnification_factor">
|
||||
<resource name="editor_magnification_factor">
|
||||
Vergrößerungsfaktor
|
||||
</resource>
|
||||
<resource name="editor_shadow">
|
||||
</resource>
|
||||
<resource name="editor_shadow">
|
||||
Schatten
|
||||
</resource>
|
||||
<resource name="editor_confirm">
|
||||
<resource name="editor_torn_edge">
|
||||
Gerissene Kanten
|
||||
</resource>
|
||||
<resource name="editor_border">
|
||||
Rand
|
||||
</resource>
|
||||
<resource name="editor_grayscale">
|
||||
Graustufe
|
||||
</resource>
|
||||
<resource name="editor_effects">
|
||||
Effekte
|
||||
</resource>
|
||||
<resource name="editor_confirm">
|
||||
Bestätigen
|
||||
</resource>
|
||||
<resource name="editor_cancel">
|
||||
<resource name="editor_cancel">
|
||||
Abbrechen
|
||||
</resource>
|
||||
<resource name="editor_crop">
|
||||
<resource name="editor_crop">
|
||||
Zuschneiden (C)
|
||||
</resource>
|
||||
<resource name="contextmenu_captureclipboard">
|
||||
|
|
|
@ -472,6 +472,18 @@ time, e.g. 11_58_32 (plus extension defined in the settings)
|
|||
<resource name="editor_shadow">
|
||||
Shadow
|
||||
</resource>
|
||||
<resource name="editor_torn_edge">
|
||||
Torn edge
|
||||
</resource>
|
||||
<resource name="editor_effects">
|
||||
Effects
|
||||
</resource>
|
||||
<resource name="editor_border">
|
||||
Border
|
||||
</resource>
|
||||
<resource name="editor_grayscale">
|
||||
Grayscale
|
||||
</resource>
|
||||
<resource name="editor_confirm">
|
||||
Confirm
|
||||
</resource>
|
||||
|
|
|
@ -435,42 +435,54 @@ genereert een directorie voor de huidige dag in uw standaard opslag lokatie, b.v
|
|||
<resource name="editor_highlight_text">
|
||||
Text markeren
|
||||
</resource>
|
||||
<resource name="editor_highlight_grayscale">
|
||||
<resource name="editor_highlight_grayscale">
|
||||
Grijstinten
|
||||
</resource>
|
||||
<resource name="editor_highlight_magnify">
|
||||
</resource>
|
||||
<resource name="editor_highlight_magnify">
|
||||
Vergroten
|
||||
</resource>
|
||||
<resource name="editor_pixel_size">
|
||||
Pixelgrootte
|
||||
</resource>
|
||||
<resource name="editor_obfuscate">
|
||||
<resource name="editor_obfuscate">
|
||||
Onherkenbaar maken (O)
|
||||
</resource>
|
||||
<resource name="editor_blur_radius">
|
||||
</resource>
|
||||
<resource name="editor_blur_radius">
|
||||
Onduidelijk maken radius
|
||||
</resource>
|
||||
<resource name="editor_brightness">
|
||||
</resource>
|
||||
<resource name="editor_brightness">
|
||||
Helderheid
|
||||
</resource>
|
||||
<resource name="editor_preview_quality">
|
||||
Voorbeeld kwaliteit
|
||||
</resource>
|
||||
<resource name="editor_magnification_factor">
|
||||
<resource name="editor_magnification_factor">
|
||||
Vergrotingsfactor
|
||||
</resource>
|
||||
<resource name="editor_shadow">
|
||||
</resource>
|
||||
<resource name="editor_shadow">
|
||||
Schaduw
|
||||
</resource>
|
||||
<resource name="editor_confirm">
|
||||
<resource name="editor_torn_edge">
|
||||
Gescheurde randen
|
||||
</resource>
|
||||
<resource name="editor_border">
|
||||
Rand
|
||||
</resource>
|
||||
<resource name="editor_grayscale">
|
||||
Grijstinten
|
||||
</resource>
|
||||
<resource name="editor_effects">
|
||||
Effecten
|
||||
</resource>
|
||||
<resource name="editor_confirm">
|
||||
Bevestigen
|
||||
</resource>
|
||||
<resource name="editor_cancel">
|
||||
<resource name="editor_cancel">
|
||||
Afbreken
|
||||
</resource>
|
||||
<resource name="editor_crop">
|
||||
</resource>
|
||||
<resource name="editor_crop">
|
||||
Bijsnijden (C)
|
||||
</resource>
|
||||
</resource>
|
||||
<resource name="contextmenu_captureclipboard">
|
||||
Laad beeld van het klembord
|
||||
</resource>
|
||||
|
|
|
@ -3,10 +3,9 @@ Greenshot: A screenshot tool optimized for productivity. Save a screenshot or a
|
|||
|
||||
CHANGE LOG:
|
||||
|
||||
0.9.0 Build 1626
|
||||
0.9.0 Build 1660
|
||||
|
||||
We changed the version to 0.9.0 as the amount of features in 0.8.1 was more than planned.
|
||||
Due to the many changes we need to go through a Release Candidate iteration again...
|
||||
|
||||
Bugs resolved:
|
||||
* Fixed a problem with the window preview, if the window had a small height, when using the context menu (Windows Vista and later)
|
||||
|
@ -24,6 +23,8 @@ Features added:
|
|||
* Added a "processor" concept, making it possible to modify the capture before it's send to a destination. Currently there is only an internal implementation which replaces the TitleFix plugin.
|
||||
* Added Office destinations (Word, Excel, Powerpoint & Outlook) with dynamic resolving of open "instances".
|
||||
* Added Ctrl/shift logic to the editor, hard to explain (see help) but hold one of the keys down and draw..
|
||||
* Added a color picker in the color dialog.
|
||||
* Added shadow & torn edges
|
||||
|
||||
|
||||
0.8.1 Build 1483
|
||||
|
|
|
@ -28,6 +28,7 @@ using System.Drawing.Drawing2D;
|
|||
using GreenshotPlugin.UnmanagedHelpers;
|
||||
using GreenshotPlugin.Core;
|
||||
using IniFile;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace GreenshotPlugin.Core {
|
||||
/// <summary>
|
||||
|
@ -557,6 +558,106 @@ namespace GreenshotPlugin.Core {
|
|||
}
|
||||
}
|
||||
|
||||
public static Bitmap FastBlur(Bitmap sourceBitmap, int radius) {
|
||||
if (radius < 1) return null;
|
||||
|
||||
var rct = new Rectangle(0, 0, sourceBitmap.Width, sourceBitmap.Height);
|
||||
var dest = new int[rct.Width * rct.Height];
|
||||
var source = new int[rct.Width * rct.Height];
|
||||
var bits = sourceBitmap.LockBits(rct, ImageLockMode.ReadWrite, sourceBitmap.PixelFormat);
|
||||
Marshal.Copy(bits.Scan0, source, 0, source.Length);
|
||||
sourceBitmap.UnlockBits(bits);
|
||||
|
||||
|
||||
int w = rct.Width;
|
||||
int h = rct.Height;
|
||||
int wm = w - 1;
|
||||
int hm = h - 1;
|
||||
int wh = w * h;
|
||||
int div = radius + radius + 1;
|
||||
var r = new int[wh];
|
||||
var g = new int[wh];
|
||||
var b = new int[wh];
|
||||
int rsum, gsum, bsum, x, y, i, p1, p2, yi;
|
||||
var vmin = new int[max(w, h)];
|
||||
var vmax = new int[max(w, h)];
|
||||
|
||||
var dv = new int[256 * div];
|
||||
for (i = 0; i < 256 * div; i++) {
|
||||
dv[i] = (i / div);
|
||||
}
|
||||
|
||||
int yw = yi = 0;
|
||||
|
||||
for (y = 0; y < h; y++) { // blur horizontal
|
||||
rsum = gsum = bsum = 0;
|
||||
for (i = -radius; i <= radius; i++) {
|
||||
int p = source[yi + min(wm, max(i, 0))];
|
||||
rsum += (p & 0xff0000) >> 16;
|
||||
gsum += (p & 0x00ff00) >> 8;
|
||||
bsum += p & 0x0000ff;
|
||||
}
|
||||
for (x = 0; x < w; x++) {
|
||||
|
||||
r[yi] = dv[rsum];
|
||||
g[yi] = dv[gsum];
|
||||
b[yi] = dv[bsum];
|
||||
|
||||
if (y == 0) {
|
||||
vmin[x] = min(x + radius + 1, wm);
|
||||
vmax[x] = max(x - radius, 0);
|
||||
}
|
||||
p1 = source[yw + vmin[x]];
|
||||
p2 = source[yw + vmax[x]];
|
||||
|
||||
rsum += ((p1 & 0xff0000) - (p2 & 0xff0000)) >> 16;
|
||||
gsum += ((p1 & 0x00ff00) - (p2 & 0x00ff00)) >> 8;
|
||||
bsum += (p1 & 0x0000ff) - (p2 & 0x0000ff);
|
||||
yi++;
|
||||
}
|
||||
yw += w;
|
||||
}
|
||||
|
||||
for (x = 0; x < w; x++) { // blur vertical
|
||||
rsum = gsum = bsum = 0;
|
||||
int yp = -radius * w;
|
||||
for (i = -radius; i <= radius; i++) {
|
||||
yi = max(0, yp) + x;
|
||||
rsum += r[yi];
|
||||
gsum += g[yi];
|
||||
bsum += b[yi];
|
||||
yp += w;
|
||||
}
|
||||
yi = x;
|
||||
for (y = 0; y < h; y++) {
|
||||
dest[yi] = unchecked((int)(0xff000000u | (uint)(dv[rsum] << 16) | (uint)(dv[gsum] << 8) | (uint)dv[bsum]));
|
||||
if (x == 0) {
|
||||
vmin[y] = min(y + radius + 1, hm) * w;
|
||||
vmax[y] = max(y - radius, 0) * w;
|
||||
}
|
||||
p1 = x + vmin[y];
|
||||
p2 = x + vmax[y];
|
||||
|
||||
rsum += r[p1] - r[p2];
|
||||
gsum += g[p1] - g[p2];
|
||||
bsum += b[p1] - b[p2];
|
||||
|
||||
yi += w;
|
||||
}
|
||||
}
|
||||
|
||||
// copy back to image
|
||||
Bitmap newImage = new Bitmap(sourceBitmap.Width, sourceBitmap.Height, sourceBitmap.PixelFormat);
|
||||
var bits2 = newImage.LockBits(rct, ImageLockMode.ReadWrite, newImage.PixelFormat);
|
||||
Marshal.Copy(dest, 0, bits2.Scan0, dest.Length);
|
||||
newImage.UnlockBits(bits);
|
||||
return newImage;
|
||||
|
||||
}
|
||||
|
||||
private static int min(int a, int b) { return Math.Min(a, b); }
|
||||
private static int max(int a, int b) { return Math.Max(a, b); }
|
||||
|
||||
/**
|
||||
* This method fixes the problem that we can't apply a filter outside the target bitmap,
|
||||
* therefor the filtered-bitmap will be shifted if we try to draw it outside the target bitmap.
|
||||
|
@ -624,6 +725,7 @@ namespace GreenshotPlugin.Core {
|
|||
//}
|
||||
// blur "shadow", apply to whole new image
|
||||
Rectangle newImageRectangle = new Rectangle(0, 0, newImage.Width, newImage.Height);
|
||||
//using (Bitmap blurImage = FastBlur(newImage, shadowSize-1)) {
|
||||
using (Bitmap blurImage = CreateBlur(newImage, newImageRectangle, true, shadowSize, 1d, false, newImageRectangle)) {
|
||||
graphics.DrawImageUnscaled(blurImage, newImageRectangle.Location);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue