Fix bottom margin in batch image export - thx Cemal :)

This commit is contained in:
Nikolaj Olsson 2018-03-24 09:08:27 +01:00
parent 9b8c39114a
commit 518f319ecb

View File

@ -1228,7 +1228,7 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
top = param.OverridePosition.Value.Y; top = param.OverridePosition.Value.Y;
} }
sb.AppendLine(string.Format("{0} {1} {2} {3} {4} {5} {6}", Path.GetFileName(fileName), FormatFabTime(param.P.StartTime, param), FormatFabTime(param.P.EndTime, param), left, top, left + param.Bitmap.Width, top + param.Bitmap.Height)); sb.AppendLine($"{Path.GetFileName(fileName)} {FormatFabTime(param.P.StartTime, param)} {FormatFabTime(param.P.EndTime, param)} {left} {top} {left + param.Bitmap.Width} {top + param.Bitmap.Height}");
} }
param.Saved = true; param.Saved = true;
} }
@ -1434,7 +1434,7 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
fullSize.Save(fileName2, ImageFormat.Png); fullSize.Save(fileName2, ImageFormat.Png);
fullSize.Dispose(); fullSize.Dispose();
string line = string.Format("{0:000} {1} V C {2} {3} {4} {5}", i, fileName1, new TimeCode().ToHHMMSSFF(), param.P.Duration.ToHHMMSSFF(), param.P.StartTime.ToHHMMSSFF(), param.P.EndTime.ToHHMMSSFF()); string line = $"{i:000} {fileName1} V C {new TimeCode().ToHHMMSSFF()} {param.P.Duration.ToHHMMSSFF()} {param.P.StartTime.ToHHMMSSFF()} {param.P.EndTime.ToHHMMSSFF()}";
sb.AppendLine(line); sb.AppendLine(line);
if (_exportType == ExportFormats.EdlClipName) if (_exportType == ExportFormats.EdlClipName)
{ {
@ -2737,7 +2737,7 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
if (text.Substring(i).StartsWith("<font ", StringComparison.OrdinalIgnoreCase)) if (text.Substring(i).StartsWith("<font ", StringComparison.OrdinalIgnoreCase))
{ {
float addLeft = 0; float addLeft = 0;
int oldPathPointIndex = path.PointCount -1; int oldPathPointIndex = path.PointCount - 1;
if (oldPathPointIndex < 0) if (oldPathPointIndex < 0)
oldPathPointIndex = 0; oldPathPointIndex = 0;
@ -3193,62 +3193,26 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
} }
} }
private static void DrawShadowAndPath2(MakeBitmapParameter parameter, Graphics g, GraphicsPath path)
{
var extraPixels = (float)(0.0389 * parameter.SubtitleFontSize + 1.038); // a little above 1 for small fonts, like 4-5 for font size 70
if (parameter.ShadowWidth > 0)
{
var shadowPath = (GraphicsPath)path.Clone();
var splittedAlpha = (double)parameter.ShadowAlpha;
for (int k = 0; k < parameter.ShadowWidth + 1; k++)
splittedAlpha = splittedAlpha * 0.9;
if (splittedAlpha > byte.MaxValue)
splittedAlpha = byte.MaxValue;
for (int k = 0; k < parameter.ShadowWidth + 1; k++)
{
var translateMatrix = new Matrix();
translateMatrix.Translate(1, 1);
shadowPath.Transform(translateMatrix);
using (var p1 = new Pen(Color.FromArgb((int)splittedAlpha, parameter.ShadowColor), extraPixels))
{
SetLineJoin(parameter.LineJoin, p1);
g.DrawPath(p1, shadowPath);
}
}
}
if (parameter.BorderWidth > 0)
{
var p1 = new Pen(parameter.BorderColor, parameter.BorderWidth + extraPixels); // needs a few extra pixels too look "normal"
SetLineJoin(parameter.LineJoin, p1);
g.DrawPath(p1, path);
p1.Dispose();
}
}
private static void SetLineJoin(string lineJoin, Pen pen) private static void SetLineJoin(string lineJoin, Pen pen)
{ {
if (!string.IsNullOrWhiteSpace(lineJoin)) if (string.IsNullOrWhiteSpace(lineJoin))
return;
if (string.Compare(lineJoin, "Round", StringComparison.OrdinalIgnoreCase) == 0)
{ {
if (string.Compare(lineJoin, "Round", StringComparison.OrdinalIgnoreCase) == 0) pen.LineJoin = LineJoin.Round;
{ }
pen.LineJoin = LineJoin.Round; else if (string.Compare(lineJoin, "Bevel", StringComparison.OrdinalIgnoreCase) == 0)
} {
else if (string.Compare(lineJoin, "Bevel", StringComparison.OrdinalIgnoreCase) == 0) pen.LineJoin = LineJoin.Bevel;
{ }
pen.LineJoin = LineJoin.Bevel; else if (string.Compare(lineJoin, "Miter", StringComparison.OrdinalIgnoreCase) == 0)
} {
else if (string.Compare(lineJoin, "Miter", StringComparison.OrdinalIgnoreCase) == 0) pen.LineJoin = LineJoin.Miter;
{ }
pen.LineJoin = LineJoin.Miter; else if (string.Compare(lineJoin, "MiterClipped", StringComparison.OrdinalIgnoreCase) == 0)
} {
else if (string.Compare(lineJoin, "MiterClipped", StringComparison.OrdinalIgnoreCase) == 0) pen.LineJoin = LineJoin.MiterClipped;
{
pen.LineJoin = LineJoin.MiterClipped;
}
} }
} }
@ -3280,6 +3244,8 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
return newImage; return newImage;
} }
private bool _allowCustomBottomMargin;
internal void Initialize(Subtitle subtitle, SubtitleFormat format, string exportType, string fileName, VideoInfo videoInfo, string videoFileName) internal void Initialize(Subtitle subtitle, SubtitleFormat format, string exportType, string fileName, VideoInfo videoInfo, string videoFileName)
{ {
_exportType = exportType; _exportType = exportType;
@ -3428,7 +3394,6 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
comboBox3D.Left = label3D.Left + label3D.Width + 3; comboBox3D.Left = label3D.Left + label3D.Width + 3;
buttonBorderColor.Text = Configuration.Settings.Language.ExportPngXml.BorderColor; buttonBorderColor.Text = Configuration.Settings.Language.ExportPngXml.BorderColor;
//labelBorderWidth.Text = Configuration.Settings.Language.ExportPngXml.BorderWidth;
labelBorderWidth.Text = Configuration.Settings.Language.ExportPngXml.BorderStyle; labelBorderWidth.Text = Configuration.Settings.Language.ExportPngXml.BorderStyle;
labelImageFormat.Text = Configuration.Settings.Language.ExportPngXml.ImageFormat; labelImageFormat.Text = Configuration.Settings.Language.ExportPngXml.ImageFormat;
checkBoxFullFrameImage.Text = Configuration.Settings.Language.ExportPngXml.FullFrameImage; checkBoxFullFrameImage.Text = Configuration.Settings.Language.ExportPngXml.FullFrameImage;
@ -3620,7 +3585,8 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
comboBoxLeftRightMarginUnit.SelectedIndex = Configuration.Settings.Tools.ExportLeftRightMarginUnit == "%" ? 0 : 1; comboBoxLeftRightMarginUnit.SelectedIndex = Configuration.Settings.Tools.ExportLeftRightMarginUnit == "%" ? 0 : 1;
if (_exportType == ExportFormats.BluraySup || _exportType == ExportFormats.VobSub || _exportType == ExportFormats.ImageFrame || _exportType == ExportFormats.BdnXml || _exportType == ExportFormats.Dost || _exportType == ExportFormats.Fab || _exportType == ExportFormats.Edl || _exportType == ExportFormats.EdlClipName) _allowCustomBottomMargin = _exportType == ExportFormats.BluraySup || _exportType == ExportFormats.VobSub || _exportType == ExportFormats.ImageFrame || _exportType == ExportFormats.BdnXml || _exportType == ExportFormats.Dost || _exportType == ExportFormats.Fab || _exportType == ExportFormats.Edl || _exportType == ExportFormats.EdlClipName;
if (_allowCustomBottomMargin)
{ {
comboBoxBottomMarginUnit.Visible = true; comboBoxBottomMarginUnit.Visible = true;
comboBoxBottomMargin.Visible = true; comboBoxBottomMargin.Visible = true;
@ -3909,12 +3875,12 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
internal int GetBottomMarginInPixels(Paragraph p) internal int GetBottomMarginInPixels(Paragraph p)
{ {
if (!comboBoxBottomMargin.Visible) if (!_allowCustomBottomMargin)
{ {
return 20; return 20;
} }
if (p != null && !string.IsNullOrEmpty(p.Extra) && _formatName == AdvancedSubStationAlpha.NameOfFormat || _formatName == SubStationAlpha.NameOfFormat) if (!string.IsNullOrEmpty(p?.Extra) && (_formatName == AdvancedSubStationAlpha.NameOfFormat || _formatName == SubStationAlpha.NameOfFormat))
{ {
var style = AdvancedSubStationAlpha.GetSsaStyle(p.Extra, _subtitle.Header); var style = AdvancedSubStationAlpha.GetSsaStyle(p.Extra, _subtitle.Header);
return style.MarginVertical; return style.MarginVertical;
@ -3928,15 +3894,14 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
GetResolution(out width, out height); GetResolution(out width, out height);
return (int)Math.Round(int.Parse(s.TrimEnd('%')) / 100.0 * height); return (int)Math.Round(int.Parse(s.TrimEnd('%')) / 100.0 * height);
} }
else // pixels
{ // pixels
return int.Parse(s); return int.Parse(s);
}
} }
private int GetLeftMarginInPixels(Paragraph p) private int GetLeftMarginInPixels(Paragraph p)
{ {
if (p != null && !string.IsNullOrEmpty(p.Extra) && _formatName == AdvancedSubStationAlpha.NameOfFormat || _formatName == SubStationAlpha.NameOfFormat) if (!string.IsNullOrEmpty(p?.Extra) && (_formatName == AdvancedSubStationAlpha.NameOfFormat || _formatName == SubStationAlpha.NameOfFormat))
{ {
var style = AdvancedSubStationAlpha.GetSsaStyle(p.Extra, _subtitle.Header); var style = AdvancedSubStationAlpha.GetSsaStyle(p.Extra, _subtitle.Header);
return style.MarginLeft; return style.MarginLeft;
@ -3950,15 +3915,14 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
GetResolution(out width, out height); GetResolution(out width, out height);
return (int)Math.Round(int.Parse(s) / 100.0 * width); return (int)Math.Round(int.Parse(s) / 100.0 * width);
} }
else // pixels
{ // pixels
return int.Parse(s); return int.Parse(s);
}
} }
private int GetRightMarginInPixels(Paragraph p) private int GetRightMarginInPixels(Paragraph p)
{ {
if (p != null && !string.IsNullOrEmpty(p.Extra) && _formatName == AdvancedSubStationAlpha.NameOfFormat || _formatName == SubStationAlpha.NameOfFormat) if (!string.IsNullOrEmpty(p?.Extra) && (_formatName == AdvancedSubStationAlpha.NameOfFormat || _formatName == SubStationAlpha.NameOfFormat))
{ {
var style = AdvancedSubStationAlpha.GetSsaStyle(p.Extra, _subtitle.Header); var style = AdvancedSubStationAlpha.GetSsaStyle(p.Extra, _subtitle.Header);
return style.MarginRight; return style.MarginRight;
@ -4025,7 +3989,7 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
if (alignment == ContentAlignment.MiddleLeft || alignment == ContentAlignment.MiddleCenter || alignment == ContentAlignment.MiddleRight) if (alignment == ContentAlignment.MiddleLeft || alignment == ContentAlignment.MiddleCenter || alignment == ContentAlignment.MiddleRight)
pictureBox1.Top = (groupBoxExportImage.Height - 4 - bmp.Height) / 2; pictureBox1.Top = (groupBoxExportImage.Height - 4 - bmp.Height) / 2;
else if (comboBoxBottomMargin.Visible && alignment == ContentAlignment.TopLeft || alignment == ContentAlignment.TopCenter || alignment == ContentAlignment.TopRight) else if (_allowCustomBottomMargin && alignment == ContentAlignment.TopLeft || alignment == ContentAlignment.TopCenter || alignment == ContentAlignment.TopRight)
pictureBox1.Top = GetBottomMarginInPixels(p); pictureBox1.Top = GetBottomMarginInPixels(p);
} }
if (bmp.Width > groupBoxExportImage.Width + 20 || bmp.Height > groupBoxExportImage.Height + 20) if (bmp.Width > groupBoxExportImage.Width + 20 || bmp.Height > groupBoxExportImage.Height + 20)
@ -4281,7 +4245,7 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
else // pixels else // pixels
Configuration.Settings.Tools.ExportBluRayBottomMarginPixels = comboBoxBottomMargin.SelectedIndex; Configuration.Settings.Tools.ExportBluRayBottomMarginPixels = comboBoxBottomMargin.SelectedIndex;
} }
else if (comboBoxBottomMargin.Visible) else if (_allowCustomBottomMargin)
{ {
if (comboBoxBottomMarginUnit.SelectedIndex == 0) // % if (comboBoxBottomMarginUnit.SelectedIndex == 0) // %
Configuration.Settings.Tools.ExportBottomMarginPercent = comboBoxBottomMargin.SelectedIndex; Configuration.Settings.Tools.ExportBottomMarginPercent = comboBoxBottomMargin.SelectedIndex;
@ -4916,6 +4880,7 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
{ {
return; return;
} }
_allowCustomBottomMargin = checkBoxFullFrameImage.Checked;
comboBoxBottomMargin.Visible = checkBoxFullFrameImage.Checked; comboBoxBottomMargin.Visible = checkBoxFullFrameImage.Checked;
labelBottomMargin.Visible = checkBoxFullFrameImage.Checked; labelBottomMargin.Visible = checkBoxFullFrameImage.Checked;
comboBoxBottomMarginUnit.Visible = checkBoxFullFrameImage.Checked; comboBoxBottomMarginUnit.Visible = checkBoxFullFrameImage.Checked;