From c294574f3800b6a25d2b30a778d3142758d2a03f Mon Sep 17 00:00:00 2001 From: Nikolaj Olsson Date: Sun, 1 Oct 2017 21:11:50 +0200 Subject: [PATCH] Add image resizing for bd sup --- src/Forms/ExportPngXml.Designer.cs | 27 ++++++++++++ src/Forms/ExportPngXml.cs | 69 +++++++++++++++++++++++++++++- 2 files changed, 95 insertions(+), 1 deletion(-) diff --git a/src/Forms/ExportPngXml.Designer.cs b/src/Forms/ExportPngXml.Designer.cs index eb4d5efb9..bbab7f312 100644 --- a/src/Forms/ExportPngXml.Designer.cs +++ b/src/Forms/ExportPngXml.Designer.cs @@ -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; } } \ No newline at end of file diff --git a/src/Forms/ExportPngXml.cs b/src/Forms/ExportPngXml.cs index 168eb2a45..23e2559e4 100644 --- a/src/Forms/ExportPngXml.cs +++ b/src/Forms/ExportPngXml.cs @@ -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); + } } }