"Save all images" in OCR window now includes a Sony BDN XML file (for easy import in other programs)

git-svn-id: https://subtitleedit.googlecode.com/svn/trunk@243 99eadd0c-20b8-1223-b5c4-2a2b2df33de2
This commit is contained in:
niksedk 2011-01-13 08:24:37 +00:00
parent 6f38ad9d65
commit 2bf05580cf
3 changed files with 51 additions and 11 deletions

View File

@ -135,40 +135,40 @@ namespace Nikse.SubtitleEdit.Forms
this.saveImageAsToolStripMenuItem, this.saveImageAsToolStripMenuItem,
this.saveAllImagesToolStripMenuItem}); this.saveAllImagesToolStripMenuItem});
this.contextMenuStripListview.Name = "contextMenuStripListview"; this.contextMenuStripListview.Name = "contextMenuStripListview";
this.contextMenuStripListview.Size = new System.Drawing.Size(164, 120); this.contextMenuStripListview.Size = new System.Drawing.Size(244, 120);
this.contextMenuStripListview.Opening += new System.ComponentModel.CancelEventHandler(this.ContextMenuStripListviewOpening); this.contextMenuStripListview.Opening += new System.ComponentModel.CancelEventHandler(this.ContextMenuStripListviewOpening);
// //
// normalToolStripMenuItem // normalToolStripMenuItem
// //
this.normalToolStripMenuItem.Name = "normalToolStripMenuItem"; this.normalToolStripMenuItem.Name = "normalToolStripMenuItem";
this.normalToolStripMenuItem.Size = new System.Drawing.Size(157, 22); this.normalToolStripMenuItem.Size = new System.Drawing.Size(243, 22);
this.normalToolStripMenuItem.Text = "Normal"; this.normalToolStripMenuItem.Text = "Normal";
this.normalToolStripMenuItem.Click += new System.EventHandler(this.NormalToolStripMenuItemClick); this.normalToolStripMenuItem.Click += new System.EventHandler(this.NormalToolStripMenuItemClick);
// //
// italicToolStripMenuItem // italicToolStripMenuItem
// //
this.italicToolStripMenuItem.Name = "italicToolStripMenuItem"; this.italicToolStripMenuItem.Name = "italicToolStripMenuItem";
this.italicToolStripMenuItem.Size = new System.Drawing.Size(157, 22); this.italicToolStripMenuItem.Size = new System.Drawing.Size(243, 22);
this.italicToolStripMenuItem.Text = "Italic"; this.italicToolStripMenuItem.Text = "Italic";
this.italicToolStripMenuItem.Click += new System.EventHandler(this.ItalicToolStripMenuItemClick); this.italicToolStripMenuItem.Click += new System.EventHandler(this.ItalicToolStripMenuItemClick);
// //
// toolStripSeparator1 // toolStripSeparator1
// //
this.toolStripSeparator1.Name = "toolStripSeparator1"; this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(154, 6); this.toolStripSeparator1.Size = new System.Drawing.Size(240, 6);
// //
// saveImageAsToolStripMenuItem // saveImageAsToolStripMenuItem
// //
this.saveImageAsToolStripMenuItem.Name = "saveImageAsToolStripMenuItem"; this.saveImageAsToolStripMenuItem.Name = "saveImageAsToolStripMenuItem";
this.saveImageAsToolStripMenuItem.Size = new System.Drawing.Size(157, 22); this.saveImageAsToolStripMenuItem.Size = new System.Drawing.Size(243, 22);
this.saveImageAsToolStripMenuItem.Text = "Save image as..."; this.saveImageAsToolStripMenuItem.Text = "Save image as...";
this.saveImageAsToolStripMenuItem.Click += new System.EventHandler(this.SaveImageAsToolStripMenuItemClick); this.saveImageAsToolStripMenuItem.Click += new System.EventHandler(this.SaveImageAsToolStripMenuItemClick);
// //
// saveAllImagesToolStripMenuItem // saveAllImagesToolStripMenuItem
// //
this.saveAllImagesToolStripMenuItem.Name = "saveAllImagesToolStripMenuItem"; this.saveAllImagesToolStripMenuItem.Name = "saveAllImagesToolStripMenuItem";
this.saveAllImagesToolStripMenuItem.Size = new System.Drawing.Size(163, 22); this.saveAllImagesToolStripMenuItem.Size = new System.Drawing.Size(243, 22);
this.saveAllImagesToolStripMenuItem.Text = "Save all images..."; this.saveAllImagesToolStripMenuItem.Text = "Save all images (png/bdn xml)...";
this.saveAllImagesToolStripMenuItem.Click += new System.EventHandler(this.saveAllImagesToolStripMenuItem_Click); this.saveAllImagesToolStripMenuItem.Click += new System.EventHandler(this.saveAllImagesToolStripMenuItem_Click);
// //
// labelSubtitleText // labelSubtitleText

View File

@ -1779,25 +1779,65 @@ namespace Nikse.SubtitleEdit.Forms
private void saveAllImagesToolStripMenuItem_Click(object sender, EventArgs e) private void saveAllImagesToolStripMenuItem_Click(object sender, EventArgs e)
{ {
int imagesSavedCount = 0;
if (folderBrowserDialog1.ShowDialog(this) == DialogResult.OK) if (folderBrowserDialog1.ShowDialog(this) == DialogResult.OK)
{ {
const int height = 1080;
const int width = 1920;
const int border = 25;
int imagesSavedCount = 0;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < _subtitle.Paragraphs.Count; i++) for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
{ {
Bitmap bmp = GetSubtitleBitmap(i); Bitmap bmp = GetSubtitleBitmap(i);
string numberString = string.Format("{0:0000}", i + 1);
if (bmp != null) if (bmp != null)
{ {
string fileName = Path.Combine(folderBrowserDialog1.SelectedPath, i.ToString() + ".png");
string fileName = Path.Combine(folderBrowserDialog1.SelectedPath, numberString + ".png");
bmp.Save(fileName, System.Drawing.Imaging.ImageFormat.Png); bmp.Save(fileName, System.Drawing.Imaging.ImageFormat.Png);
imagesSavedCount++; imagesSavedCount++;
Paragraph p = _subtitle.Paragraphs[i];
//<Event InTC="00:00:24:07" OutTC="00:00:31:13" Forced="False">
// <Graphic Width="696" Height="111" X="612" Y="930">subtitle_exp_0001.png</Graphic>
//</Event>
sb.AppendLine("<Event InTC=\"" + BdnXmlTimeCode(p.StartTime) + "\" OutTC=\"" + BdnXmlTimeCode(p.EndTime) + "\" Forced=\"False\">");
int x = (width - bmp.Width) / 2;
int y = height - (bmp.Height + border);
sb.AppendLine(" <Graphic Width=\"" + bmp.Width.ToString() + "\" Height=\"" + bmp.Height.ToString() + "\" X=\"" + x.ToString() + "\" Y=\"" + y.ToString() + "\">" + numberString + ".png</Graphic>");
sb.AppendLine("</Event>");
bmp.Dispose(); bmp.Dispose();
} }
} }
XmlDocument doc = new XmlDocument();
Paragraph first = _subtitle.Paragraphs[0];
Paragraph last = _subtitle.Paragraphs[_subtitle.Paragraphs.Count - 1];
doc.LoadXml("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + Environment.NewLine +
"<BDN Version=\"0.93\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"BD-03-006-0093b BDN File Format.xsd\">" + Environment.NewLine +
"<Description>" + Environment.NewLine +
"<Name Title=\"subtitle_exp\" Content=\"\"/>" + Environment.NewLine +
"<Language Code=\"eng\"/>" + Environment.NewLine +
"<Format VideoFormat=\"1080p\" FrameRate=\"25\" DropFrame=\"False\"/>" + Environment.NewLine +
"<Events Type=\"Graphic\" FirstEventInTC=\"" + BdnXmlTimeCode(first.StartTime) + "\" LastEventOutTC=\"" + BdnXmlTimeCode(last.EndTime) + "\" NumberofEvents=\"" + imagesSavedCount.ToString() + "\"/>" + Environment.NewLine +
"</Description>" + Environment.NewLine +
"<Events>" + Environment.NewLine +
"</Events>" + Environment.NewLine +
"</BDN>");
XmlNode events = doc.DocumentElement.SelectSingleNode("Events");
events.InnerXml = sb.ToString();
File.WriteAllText(Path.Combine(folderBrowserDialog1.SelectedPath, "BDN_Index.xml"), doc.OuterXml);
MessageBox.Show(string.Format("{0} images saved in {1}", imagesSavedCount, folderBrowserDialog1.SelectedPath)); MessageBox.Show(string.Format("{0} images saved in {1}", imagesSavedCount, folderBrowserDialog1.SelectedPath));
} }
} }
private static string BdnXmlTimeCode(TimeCode timecode)
{
int frames = timecode.Milliseconds / 40; // 40==25fps (1000/25)
return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", timecode.Hours, timecode.Minutes, timecode.Seconds, frames);
}
private void NormalToolStripMenuItemClick(object sender, EventArgs e) private void NormalToolStripMenuItemClick(object sender, EventArgs e)
{ {
if (_subtitle.Paragraphs.Count > 0 && subtitleListView1.SelectedItems.Count > 0) if (_subtitle.Paragraphs.Count > 0 && subtitleListView1.SelectedItems.Count > 0)

View File

@ -1276,7 +1276,7 @@ can edit in same subtitle file (collaboration)",
OcrViaTesseract = "OCR via Tesseract", OcrViaTesseract = "OCR via Tesseract",
FixOcrErrors = "Fix OCR errors", FixOcrErrors = "Fix OCR errors",
SaveSubtitleImageAs = "Save subtitle image as...", SaveSubtitleImageAs = "Save subtitle image as...",
SaveAllSubtitleImagesAs = "Save all subtitle images as...", SaveAllSubtitleImagesAs = "Save all images (png/bdn xml)...",
XImagesSavedInY = "{0} images saved in {1}", XImagesSavedInY = "{0} images saved in {1}",
TryModiForUnknownWords = "Try MS MODI OCR for unknown words", TryModiForUnknownWords = "Try MS MODI OCR for unknown words",
DictionaryX = "Dictionary: {0}", DictionaryX = "Dictionary: {0}",