public bool ShowDialogOk() { using (var saveOptions = new EbuSaveOptions()) { saveOptions.Initialize(_header, _justificationCode, _fileName, _subtitle); return saveOptions.ShowDialog() == DialogResult.OK; } }
public bool ShowDialogOk() { using (var saveOptions = new EbuSaveOptions()) { saveOptions.Initialize(_header, _justificationCode, _fileName, _subtitle); if (saveOptions.ShowDialog() == DialogResult.OK) { _justificationCode = saveOptions.JustificationCode; return true; } return false; } }
private void toolStripMenuItemEbuProperties_Click(object sender, EventArgs e) { using (var properties = new EbuSaveOptions()) { if (_subtitle != null && _subtitle.Header != null && (_subtitle.Header.Contains("STL2") || _subtitle.Header.Contains("STL3"))) { var header = Ebu.ReadHeader(Encoding.UTF8.GetBytes(_subtitle.Header)); properties.Initialize(header, 0, null, _subtitle); } else { var header = new Ebu.EbuGeneralSubtitleInformation(); if (!string.IsNullOrEmpty(_fileName) && new Ebu().IsMine(null, _fileName)) properties.Initialize(header, 0, _fileName, _subtitle); else properties.Initialize(header, 0, null, _subtitle); } properties.ShowDialog(this); } }
private void ShowEbuSettings() { using (var properties = new EbuSaveOptions()) { properties.Initialize(_ebuGeneralInformation, 0, null, null); properties.ShowDialog(this); } }
/// <summary> /// The save. /// </summary> /// <param name="fileName"> /// The file name. /// </param> /// <param name="subtitle"> /// The subtitle. /// </param> /// <param name="batchMode"> /// The batch mode. /// </param> public static void Save(string fileName, Subtitle subtitle, bool batchMode) { EbuGeneralSubtitleInformation header = new EbuGeneralSubtitleInformation(); using (EbuSaveOptions saveOptions = new EbuSaveOptions()) { if (subtitle.Header != null && subtitle.Header.Length > 1024 && (subtitle.Header.Contains("STL24") || subtitle.Header.Contains("STL25") || subtitle.Header.Contains("STL29") || subtitle.Header.Contains("STL30"))) { header = ReadHeader(Encoding.UTF8.GetBytes(subtitle.Header)); saveOptions.Initialize(header, 0, null, subtitle); } else { saveOptions.Initialize(header, 0, fileName, subtitle); } if (!batchMode && saveOptions.ShowDialog() != DialogResult.OK) { return; } using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write)) { header.TotalNumberOfSubtitles = subtitle.Paragraphs.Count.ToString("D5"); // seems to be 1 higher than actual number of subtitles header.TotalNumberOfTextAndTimingInformationBlocks = header.TotalNumberOfSubtitles; string today = string.Format("{0:yyMMdd}", DateTime.Now); if (today.Length == 6) { header.CreationDate = today; header.RevisionDate = today; } Paragraph firstParagraph = subtitle.GetParagraphOrDefault(0); if (firstParagraph != null) { TimeCode tc = firstParagraph.StartTime; string firstTimeCode = string.Format("{0:00}{1:00}{2:00}{3:00}", tc.Hours, tc.Minutes, tc.Seconds, EbuTextTimingInformation.GetFrameFromMilliseconds(tc.Milliseconds, header.FrameRate)); if (firstTimeCode.Length == 8) { header.TimeCodeFirstInCue = firstTimeCode; } } byte[] buffer = Encoding.Default.GetBytes(header.ToString()); fs.Write(buffer, 0, buffer.Length); int subtitleNumber = 0; foreach (Paragraph p in subtitle.Paragraphs) { EbuTextTimingInformation tti = new EbuTextTimingInformation(); int rows; if (!int.TryParse(header.MaximumNumberOfDisplayableRows, out rows)) { rows = 23; } if (header.DisplayStandardCode == "1" || header.DisplayStandardCode == "2") { // teletext rows = 23; } else if (header.DisplayStandardCode == "0" && header.MaximumNumberOfDisplayableRows == "02") { // open subtitling rows = 15; } if (p.Text.StartsWith("{\\an7}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an8}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an9}", StringComparison.Ordinal)) { tti.VerticalPosition = 1; // top (vertical) } else if (p.Text.StartsWith("{\\an4}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an5}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an6}", StringComparison.Ordinal)) { tti.VerticalPosition = (byte)(rows / 2); // middle (vertical) } else { int startRow = (rows - 1) - Utilities.CountTagInText(p.Text, Environment.NewLine) * 2; if (startRow < 0) { startRow = 0; } tti.VerticalPosition = (byte)startRow; // bottom (vertical) } tti.JustificationCode = saveOptions.JustificationCode; if (p.Text.StartsWith("{\\an1}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an4}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an7}", StringComparison.Ordinal)) { tti.JustificationCode = 1; // 01h=left-justified text } else if (p.Text.StartsWith("{\\an3}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an6}", StringComparison.Ordinal) || p.Text.StartsWith("{\\an9}", StringComparison.Ordinal)) { tti.JustificationCode = 3; // 03h=right-justified } else { // If it's not left- or right-justified, it's centred. tti.JustificationCode = 2; // 02h=centred text } tti.SubtitleNumber = (ushort)subtitleNumber; tti.TextField = p.Text; int startTag = tti.TextField.IndexOf('}'); if (tti.TextField.StartsWith("{\\", StringComparison.Ordinal) && startTag > 0 && startTag < 10) { tti.TextField = tti.TextField.Remove(0, startTag + 1); } tti.TimeCodeInHours = p.StartTime.Hours; tti.TimeCodeInMinutes = p.StartTime.Minutes; tti.TimeCodeInSeconds = p.StartTime.Seconds; tti.TimeCodeInMilliseconds = p.StartTime.Milliseconds; tti.TimeCodeOutHours = p.EndTime.Hours; tti.TimeCodeOutMinutes = p.EndTime.Minutes; tti.TimeCodeOutSeconds = p.EndTime.Seconds; tti.TimeCodeOutMilliseconds = p.EndTime.Milliseconds; buffer = tti.GetBytes(header); fs.Write(buffer, 0, buffer.Length); subtitleNumber++; } } } }