Add image resizing for bd sup

This commit is contained in:
Nikolaj Olsson 2017-10-01 21:11:50 +02:00
parent 55251c9a0e
commit c294574f38
2 changed files with 95 additions and 1 deletions

View File

@ -99,6 +99,8 @@
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.comboBoxResizePercentage = new System.Windows.Forms.ComboBox();
this.labelResize = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.contextMenuStrip1.SuspendLayout();
this.groupBoxImageSettings.SuspendLayout();
@ -170,6 +172,8 @@
//
this.groupBoxImageSettings.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBoxImageSettings.Controls.Add(this.labelResize);
this.groupBoxImageSettings.Controls.Add(this.comboBoxResizePercentage);
this.groupBoxImageSettings.Controls.Add(this.comboBoxBottomMarginUnit);
this.groupBoxImageSettings.Controls.Add(this.comboBoxLeftRightMarginUnit);
this.groupBoxImageSettings.Controls.Add(this.labelLineHeightStyle);
@ -988,6 +992,27 @@
this.subtitleListView1.SelectedIndexChanged += new System.EventHandler(this.subtitleListView1_SelectedIndexChanged);
this.subtitleListView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.subtitleListView1_KeyDown);
//
// comboBoxResizePercentage
//
this.comboBoxResizePercentage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxResizePercentage.FormattingEnabled = true;
this.comboBoxResizePercentage.Location = new System.Drawing.Point(296, 5);
this.comboBoxResizePercentage.Name = "comboBoxResizePercentage";
this.comboBoxResizePercentage.Size = new System.Drawing.Size(77, 21);
this.comboBoxResizePercentage.TabIndex = 18;
this.comboBoxResizePercentage.Visible = false;
this.comboBoxResizePercentage.SelectedIndexChanged += new System.EventHandler(this.comboBoxResizePercentage_SelectedIndexChanged);
//
// labelResize
//
this.labelResize.AutoSize = true;
this.labelResize.Location = new System.Drawing.Point(251, 8);
this.labelResize.Name = "labelResize";
this.labelResize.Size = new System.Drawing.Size(39, 13);
this.labelResize.TabIndex = 61;
this.labelResize.Text = "Resize";
this.labelResize.Visible = false;
//
// ExportPngXml
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -1098,5 +1123,7 @@
private System.Windows.Forms.Label labelLineHeightStyle;
private System.Windows.Forms.ComboBox comboBoxBottomMarginUnit;
private System.Windows.Forms.ComboBox comboBoxLeftRightMarginUnit;
private System.Windows.Forms.ComboBox comboBoxResizePercentage;
private System.Windows.Forms.Label labelResize;
}
}

View File

@ -557,6 +557,13 @@ namespace Nikse.SubtitleEdit.Forms
{
var mp = MakeMakeBitmapParameter(i, width, height);
mp.Bitmap = _vobSubOcr.GetSubtitleBitmap(i++);
var exp = GetResizeScale();
if (Math.Abs(exp - 1) > 0.01)
{
var resizedBitmap = ResizeBitmap(mp.Bitmap, (int)Math.Round(mp.Bitmap.Width * exp), (int)Math.Round(mp.Bitmap.Height * exp));
mp.Bitmap.Dispose();
mp.Bitmap = resizedBitmap;
}
if (_exportType == ExportFormats.BluraySup)
{
MakeBluRaySupImage(mp);
@ -1945,6 +1952,15 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
return font;
}
private double GetResizeScale()
{
if (comboBoxResizePercentage.SelectedItem == null)
return 1.0;
var p = int.Parse(comboBoxResizePercentage.SelectedItem.ToString().Replace("%", string.Empty));
return p / 100.0;
}
private Bitmap GenerateImageFromTextWithStyle(Paragraph p, out MakeBitmapParameter mbp)
{
mbp = new MakeBitmapParameter { P = p };
@ -1953,7 +1969,18 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
{
var index = _subtitle.GetIndex(p);
if (index >= 0)
return _vobSubOcr.GetSubtitleBitmap(index);
{
var b = _vobSubOcr.GetSubtitleBitmap(index);
var exp = GetResizeScale();
if (Math.Abs(exp - 1) > 0.01)
{
var resizedBitmap = ResizeBitmap(b, (int)Math.Round(b.Width * exp), (int)Math.Round(b.Height * exp));
b.Dispose();
return resizedBitmap;
}
return b;
}
}
mbp.AlignLeft = comboBoxHAlign.SelectedIndex == 0;
@ -3763,6 +3790,28 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
internal void InitializeFromVobSubOcr(Subtitle subtitle, SubtitleFormat format, string exportType, string fileName, VobSubOcr vobSubOcr, string languageString)
{
_vobSubOcr = vobSubOcr;
if (_vobSubOcr != null && exportType != ExportFormats.VobSub)
{
comboBoxResizePercentage.Items.Clear();
for (int i = 50; i < 400; i++)
{
comboBoxResizePercentage.Items.Add(i + "%");
}
comboBoxResizePercentage.Items.Add("500%");
comboBoxResizePercentage.SelectedIndex = 50;
comboBoxResizePercentage.Visible = true;
labelResize.Visible = true;
labelResize.Left = buttonColor.Left;
labelResize.Top = buttonColor.Top;
comboBoxResizePercentage.Left = labelResize.Left + labelResize.Width + 5;
comboBoxResizePercentage.Top = labelResize.Top - 4;
}
else
{
comboBoxResizePercentage.Visible = false;
labelResize.Visible = false;
}
Initialize(subtitle, format, exportType, fileName, null, _videoFileName);
//set language
@ -4901,5 +4950,23 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine +
{
_previewTimer.Start();
}
public static Bitmap ResizeBitmap(Bitmap b, int width, int height)
{
Bitmap newImage = new Bitmap(width, height);
using (var g = Graphics.FromImage(newImage))
{
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.DrawImage(b, new Rectangle(0, 0, width, height));
}
return newImage;
}
private void comboBoxResizePercentage_SelectedIndexChanged(object sender, EventArgs e)
{
subtitleListView1_SelectedIndexChanged(null, null);
}
}
}