本文整理汇总了C#中Nikse.SubtitleEdit.Logic.NikseBitmap.GetBitmap方法的典型用法代码示例。如果您正苦于以下问题:C# NikseBitmap.GetBitmap方法的具体用法?C# NikseBitmap.GetBitmap怎么用?C# NikseBitmap.GetBitmap使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Nikse.SubtitleEdit.Logic.NikseBitmap
的用法示例。
在下文中一共展示了NikseBitmap.GetBitmap方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Initialize
internal void Initialize(Bitmap vobSubImage, ImageSplitterItem character, Point position, bool italicChecked, bool showShrink)
{
listBoxLinesForeground.Items.Clear();
listBoxlinesBackground.Items.Clear();
NikseBitmap nbmp = new NikseBitmap(vobSubImage);
nbmp.ReplaceTransparentWith(Color.Black);
vobSubImage = nbmp.GetBitmap();
radioButtonHot.Checked = true;
ShrinkSelection = false;
ExpandSelection = false;
textBoxCharacters.Text = string.Empty;
_nocrChar = new NOcrChar();
_nocrChar.MarginTop = character.Y - character.ParentY;
_imageWidth = character.NikseBitmap.Width;
_imageHeight = character.NikseBitmap.Height;
_drawLineOn = false;
_warningNoNotForegroundLinesShown = false;
buttonShrinkSelection.Visible = showShrink;
if (position.X != -1 && position.Y != -1)
{
StartPosition = FormStartPosition.Manual;
Left = position.X;
Top = position.Y;
}
pictureBoxSubtitleImage.Image = vobSubImage;
pictureBoxCharacter.Image = character.NikseBitmap.GetBitmap();
Bitmap org = (Bitmap)vobSubImage.Clone();
Bitmap bm = new Bitmap(org.Width, org.Height);
Graphics g = Graphics.FromImage(bm);
g.DrawImage(org, 0, 0, org.Width, org.Height);
g.DrawRectangle(Pens.Red, character.X, character.Y, character.NikseBitmap.Width, character.NikseBitmap.Height - 1);
g.Dispose();
pictureBoxSubtitleImage.Image = bm;
pictureBoxCharacter.Top = labelCharacters.Top + 16;
SizePictureBox();
checkBoxItalic.Checked = italicChecked;
_history = new List<NOcrChar>();
_historyIndex = -1;
_nocrChar.Width = _imageWidth;
_nocrChar.Height = _imageHeight;
GenerateLineSegments(150, false, _nocrChar, new NikseBitmap(pictureBoxCharacter.Image as Bitmap));
ShowOcrPoints();
pictureBoxCharacter.Invalidate();
}
示例2: Initialize
internal void Initialize(Bitmap bitmap, int pixelsIsSpace, bool rightToLeft, NOcrDb nOcrDb, VobSubOcr vobSubOcr)
{
_bitmap = bitmap;
var nbmp = new NikseBitmap(bitmap);
nbmp.ReplaceNonWhiteWithTransparent();
bitmap = nbmp.GetBitmap();
_bitmap2 = bitmap;
_nocrChars = nOcrDb.OcrCharacters;
_matchList = new List<VobSubOcr.CompareMatch>();
_vobSubOcr = vobSubOcr;
int minLineHeight = 6;
_imageList = NikseBitmapImageSplitter.SplitBitmapToLettersNew(nbmp, pixelsIsSpace, rightToLeft, Configuration.Settings.VobSubOcr.TopToBottom, minLineHeight);
// _imageList = NikseBitmapImageSplitter.SplitBitmapToLetters(nbmp, pixelsIsSpace, rightToLeft, Configuration.Settings.VobSubOcr.TopToBottom);
int index = 0;
while (index < _imageList.Count)
{
ImageSplitterItem item = _imageList[index];
if (item.NikseBitmap == null)
{
listBoxInspectItems.Items.Add(item.SpecialCharacter);
_matchList.Add(null);
}
else
{
nbmp = item.NikseBitmap;
nbmp.ReplaceNonWhiteWithTransparent();
item.Y += nbmp.CropTopTransparent(0);
nbmp.CropTransparentSidesAndBottom(0, true);
nbmp.ReplaceTransparentWith(Color.Black);
//get nocr matches
Nikse.SubtitleEdit.Forms.VobSubOcr.CompareMatch match = vobSubOcr.GetNOcrCompareMatchNew(item, nbmp, nOcrDb, false, false);
if (match == null)
{
listBoxInspectItems.Items.Add("?");
_matchList.Add(null);
}
else
{
listBoxInspectItems.Items.Add(match.Text);
_matchList.Add(match);
}
}
index++;
}
}
示例3: Initialize
internal void Initialize(Bitmap vobSubImage, ImageSplitterItem character, Point position, bool italicChecked, bool showShrink, VobSubOcr.CompareMatch bestGuess, List<VobSubOcr.ImageCompareAddition> additions, VobSubOcr vobSubForm)
{
NikseBitmap nbmp = new NikseBitmap(vobSubImage);
nbmp.ReplaceTransparentWith(Color.Black);
vobSubImage = nbmp.GetBitmap();
radioButtonHot.Checked = true;
ShrinkSelection = false;
ExpandSelection = false;
textBoxCharacters.Text = string.Empty;
_vobSubForm = vobSubForm;
_additions = additions;
_nocrChar = new NOcrChar();
_nocrChar.MarginTop = character.Y - character.ParentY;
_imageWidth = character.NikseBitmap.Width;
_imageHeight = character.NikseBitmap.Height;
_drawLineOn = false;
_warningNoNotForegroundLinesShown = false;
buttonShrinkSelection.Visible = showShrink;
if (position.X != -1 && position.Y != -1)
{
StartPosition = FormStartPosition.Manual;
Left = position.X;
Top = position.Y;
}
pictureBoxSubtitleImage.Image = vobSubImage;
pictureBoxCharacter.Image = character.NikseBitmap.GetBitmap();
Bitmap org = (Bitmap)vobSubImage.Clone();
Bitmap bm = new Bitmap(org.Width, org.Height);
Graphics g = Graphics.FromImage(bm);
g.DrawImage(org, 0, 0, org.Width, org.Height);
g.DrawRectangle(Pens.Red, character.X, character.Y, character.NikseBitmap.Width, character.NikseBitmap.Height - 1);
g.Dispose();
pictureBoxSubtitleImage.Image = bm;
pictureBoxCharacter.Top = labelCharacters.Top + 16;
SizePictureBox();
checkBoxItalic.Checked = italicChecked;
_history = new List<NOcrChar>();
_historyIndex = -1;
}
示例4: listBoxSubtitles_SelectedIndexChanged
private void listBoxSubtitles_SelectedIndexChanged(object sender, EventArgs e)
{
int idx = listBoxSubtitles.SelectedIndex;
if (idx < 0)
return;
int pid = _tsParser.SubtitlePacketIds[listBoxTracks.SelectedIndex];
var list = _tsParser.GetDvbSubtitles(pid);
var dvbBmp = list[idx].GetActiveImage();
var nDvbBmp = new NikseBitmap(dvbBmp);
nDvbBmp.CropTopTransparent(2);
nDvbBmp.CropTransparentSidesAndBottom(2, true);
dvbBmp.Dispose();
var oldImage = pictureBox1.Image;
pictureBox1.Image = nDvbBmp.GetBitmap();
if (oldImage != null)
oldImage.Dispose();
}
示例5: GenerateImageFromTextWithStyle
//.........这里部分代码省略.........
Font font;
try
{
var fontStyle = FontStyle.Regular;
if (subtitleFontBold)
fontStyle = FontStyle.Bold;
font = new Font(_subtitleFontName, _subtitleFontSize, fontStyle);
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
font = new Font(FontFamily.Families[0].Name, _subtitleFontSize);
}
var bmp = new Bitmap(400, 200);
var g = Graphics.FromImage(bmp);
SizeF textSize = g.MeasureString("Hj!", font);
var lineHeight = (textSize.Height * 0.64f);
textSize = g.MeasureString(Utilities.RemoveHtmlTags(text), font);
g.Dispose();
bmp.Dispose();
int sizeX = (int)(textSize.Width * 0.8) + 40;
int sizeY = (int)(textSize.Height * 0.8) + 30;
if (sizeX < 1)
sizeX = 1;
if (sizeY < 1)
sizeY = 1;
bmp = new Bitmap(sizeX, sizeY);
g = Graphics.FromImage(bmp);
var lefts = new List<float>();
foreach (string line in Utilities.RemoveHtmlFontTag(text.Replace("<i>", string.Empty).Replace("</i>", string.Empty)).Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries))
{
if (subtitleAlignLeft)
lefts.Add(5);
else if (subtitleAlignRight)
lefts.Add(bmp.Width - (TextDraw.MeasureTextWidth(font, line, subtitleFontBold) + 15));
else
lefts.Add((float)(bmp.Width - g.MeasureString(line, font).Width * 0.8 + 15) / 2);
}
g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
g.SmoothingMode = SmoothingMode.AntiAlias;
g.CompositingQuality = CompositingQuality.HighQuality;
var sf = new StringFormat();
sf.Alignment = StringAlignment.Near;
sf.LineAlignment = StringAlignment.Near;// draw the text to a path
var path = new GraphicsPath();
// display italic
var sb = new StringBuilder();
int i = 0;
bool isItalic = false;
float left = 5;
if (lefts.Count > 0)
left = lefts[0];
float top = 5;
bool newLine = false;
int lineNumber = 0;
float leftMargin = left;
int newLinePathPoint = -1;
Color c = _subtitleColor;
var colorStack = new Stack<Color>();
var lastText = new StringBuilder();
while (i < text.Length)
{
if (text.Substring(i).StartsWith(Environment.NewLine))
{
TextDraw.DrawText(font, sf, path, sb, isItalic, subtitleFontBold, false, left, top, ref newLine, leftMargin, ref newLinePathPoint);
top += lineHeight;
newLine = true;
i += Environment.NewLine.Length - 1;
lineNumber++;
if (lineNumber < lefts.Count)
{
leftMargin = lefts[lineNumber];
left = leftMargin;
}
}
else
{
sb.Append(text.Substring(i, 1));
}
i++;
}
if (sb.Length > 0)
TextDraw.DrawText(font, sf, path, sb, isItalic, subtitleFontBold, false, left, top, ref newLine, leftMargin, ref newLinePathPoint);
if (_borderWidth > 0)
g.DrawPath(new Pen(_borderColor, _borderWidth), path);
g.FillPath(new SolidBrush(c), path);
g.Dispose();
var nbmp = new NikseBitmap(bmp);
nbmp.CropTransparentSidesAndBottom(2, true);
return nbmp.GetBitmap();
}
示例6: Tesseract3DoOcrViaExe
private string Tesseract3DoOcrViaExe(Bitmap bmp, string language, string psmMode)
{
// change yellow color to white - easier for Tesseract
var nbmp = new NikseBitmap(bmp);
nbmp.ReplaceYellowWithWhite(); // optimized replace
bool useHocr = true;
string tempTiffFileName = Path.GetTempPath() + Guid.NewGuid().ToString() + ".png";
var b = nbmp.GetBitmap();
b.Save(tempTiffFileName, System.Drawing.Imaging.ImageFormat.Png);
string tempTextFileName = Path.GetTempPath() + Guid.NewGuid().ToString();
b.Dispose();
var process = new Process();
process.StartInfo = new ProcessStartInfo(Configuration.TesseractFolder + "tesseract.exe");
process.StartInfo.UseShellExecute = true;
process.StartInfo.Arguments = "\"" + tempTiffFileName + "\" \"" + tempTextFileName + "\" -l " + language;
if (checkBoxTesseractMusicOn.Checked)
process.StartInfo.Arguments += "+music";
if (!string.IsNullOrEmpty(psmMode))
process.StartInfo.Arguments += " " + psmMode.Trim();
if (useHocr)
process.StartInfo.Arguments += " hocr";
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
if (Utilities.IsRunningOnLinux() || Utilities.IsRunningOnMac())
{
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.FileName = "tesseract";
}
else
{
process.StartInfo.WorkingDirectory = (Configuration.TesseractFolder);
}
try
{
process.Start();
}
catch
{
MessageBox.Show("Unable to start 'tesseract' - make sure tesseract-ocr 3.x is installed!");
throw;
}
process.WaitForExit(5000);
string result = string.Empty;
if (useHocr)
{
string outputFileName = tempTextFileName + ".html";
try
{
if (File.Exists(outputFileName))
{
result = File.ReadAllText(outputFileName);
result = ParseHocr(result);
File.Delete(outputFileName);
}
File.Delete(tempTiffFileName);
}
catch
{
}
}
else
{
string outputFileName = tempTextFileName + ".txt";
try
{
if (File.Exists(outputFileName))
{
result = File.ReadAllText(outputFileName);
File.Delete(outputFileName);
}
File.Delete(tempTiffFileName);
}
catch
{
}
}
return result;
}
示例7: OcrViaTesseract
//.........这里部分代码省略.........
else if (textWithOutFixes.Length > 0 && textWithOutFixes.EndsWith(".") && !newText.EndsWith(".") && !newText.EndsWith(",") && !newText.EndsWith("!") &&
!newText.EndsWith("?") && !newText.EndsWith("</i>"))
newText = newText.TrimEnd() + ".";
else if (textWithOutFixes.Length > 0 && textWithOutFixes.EndsWith("?") && !newText.EndsWith(".") && !newText.EndsWith(",") && !newText.EndsWith("!") &&
!newText.EndsWith("?") && !newText.EndsWith("</i>"))
newText = newText.TrimEnd() + "?";
textWithOutFixes = newUnfixedText;
line = FixItalics(newText);
}
else if (correctWords > oldCorrectWords + 1 || (correctWords > oldCorrectWords && !textWithOutFixes.Contains(" ")))
{
wordsNotFound = newWordsNotFound;
textWithOutFixes = newUnfixedText;
line = newText;
}
else
{
_ocrFixEngine.UnknownWordsFound.Clear();
_ocrFixEngine.UnknownWordsFound.AddRange(oldUnkownWords);
}
}
if (wordsNotFound > 0 || correctWords == 0 || textWithOutFixes != null && textWithOutFixes.ToString().Replace("~", string.Empty).Trim().Length < 2)
{
if (_bluRaySubtitles != null && !line.Contains("<i>"))
{
_ocrFixEngine.AutoGuessesUsed.Clear();
_ocrFixEngine.UnknownWordsFound.Clear();
// which is best - normal image or one color image?
var nbmp = new NikseBitmap(bitmap);
nbmp.MakeOneColor(Color.White);
Bitmap oneColorBitmap = nbmp.GetBitmap();
string oneColorText = Tesseract3DoOcrViaExe(oneColorBitmap, _languageId, "-psm 6"); // 6 = Assume a single uniform block of text.
oneColorBitmap.Dispose();
nbmp = null;
if (oneColorText.Length > 1 &&
!oneColorText.Contains("CD") &&
(!oneColorText.Contains("0") || line.Contains("0")) &&
(!oneColorText.Contains("2") || line.Contains("2")) &&
(!oneColorText.Contains("3") || line.Contains("4")) &&
(!oneColorText.Contains("5") || line.Contains("5")) &&
(!oneColorText.Contains("9") || line.Contains("9")) &&
(!oneColorText.Contains("•") || line.Contains("•")) &&
(!oneColorText.Contains(")") || line.Contains(")")) &&
Utilities.CountTagInText(oneColorText, "(") < 2 && Utilities.CountTagInText(oneColorText, ")") < 2 &&
Utilities.CountTagInText(oneColorText, Environment.NewLine) < 3)
{
int modiCorrectWords;
int modiWordsNotFound = _ocrFixEngine.CountUnknownWordsViaDictionary(oneColorText, out modiCorrectWords);
string modiTextOcrFixed = oneColorText;
if (checkBoxAutoFixCommonErrors.Checked)
modiTextOcrFixed = _ocrFixEngine.FixOcrErrors(oneColorText, index, _lastLine, false, checkBoxGuessUnknownWords.Checked);
int modiOcrCorrectedCorrectWords;
int modiOcrCorrectedWordsNotFound = _ocrFixEngine.CountUnknownWordsViaDictionary(modiTextOcrFixed, out modiOcrCorrectedCorrectWords);
if (modiOcrCorrectedWordsNotFound <= modiWordsNotFound)
{
oneColorText = modiTextOcrFixed;
modiWordsNotFound = modiOcrCorrectedWordsNotFound;
modiCorrectWords = modiOcrCorrectedCorrectWords;
}
if (modiWordsNotFound < wordsNotFound || (textWithOutFixes.Length == 1 && modiWordsNotFound == 0))
{
示例8: GetSubtitleBitmap
public Bitmap GetSubtitleBitmap(int index)
{
Bitmap returnBmp = null;
Color background;
Color pattern;
Color emphasis1;
Color emphasis2;
if (_mp4List != null)
{
if (checkBoxCustomFourColors.Checked)
{
GetCustomColors(out background, out pattern, out emphasis1, out emphasis2);
returnBmp = _mp4List[index].Picture.GetBitmap(null, background, pattern, emphasis1, emphasis2, true);
if (checkBoxAutoTransparentBackground.Checked)
returnBmp.MakeTransparent();
}
else
{
returnBmp = _mp4List[index].Picture.GetBitmap(null, Color.Transparent, Color.Black, Color.White, Color.Black, false);
if (checkBoxAutoTransparentBackground.Checked)
returnBmp.MakeTransparent();
}
}
else if (_spList != null)
{
if (checkBoxCustomFourColors.Checked)
{
GetCustomColors(out background, out pattern, out emphasis1, out emphasis2);
returnBmp = _spList[index].Picture.GetBitmap(null, background, pattern, emphasis1, emphasis2, true);
if (checkBoxAutoTransparentBackground.Checked)
returnBmp.MakeTransparent();
}
else
{
returnBmp = _spList[index].Picture.GetBitmap(null, Color.Transparent, Color.Black, Color.White, Color.Black, false);
if (checkBoxAutoTransparentBackground.Checked)
returnBmp.MakeTransparent();
}
}
else if (_bdnXmlSubtitle != null)
{
if (index >= 0 && index < _bdnXmlSubtitle.Paragraphs.Count)
{
string[] fileNames = _bdnXmlSubtitle.Paragraphs[index].Text.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
var bitmaps = new List<Bitmap>();
int maxWidth = 0;
int totalHeight = 0;
foreach (string fn in fileNames)
{
string fullFileName = Path.Combine(Path.GetDirectoryName(_bdnFileName), fn);
if (File.Exists(fullFileName))
{
try
{
var temp = new Bitmap(fullFileName);
if (temp.Width > maxWidth)
maxWidth = temp.Width;
totalHeight += temp.Height;
bitmaps.Add(temp);
}
catch
{
return null;
}
}
}
Bitmap b = null;
if (bitmaps.Count > 1)
{
var merged = new Bitmap(maxWidth, totalHeight + 7 * bitmaps.Count);
int y = 0;
for (int k = 0; k < bitmaps.Count; k++)
{
Bitmap part = bitmaps[k];
if (checkBoxAutoTransparentBackground.Checked)
part.MakeTransparent();
using (var g = Graphics.FromImage(merged))
g.DrawImage(part, 0, y);
y += part.Height + 7;
part.Dispose();
}
b = merged;
}
else if (bitmaps.Count == 1)
{
b = bitmaps[0];
}
if (b != null)
{
if (_isSon && checkBoxCustomFourColors.Checked)
{
GetCustomColors(out background, out pattern, out emphasis1, out emphasis2);
FastBitmap fbmp = new FastBitmap(b);
//.........这里部分代码省略.........
示例9: ToOldBitmap
public Bitmap ToOldBitmap()
{
NikseBitmap nbmp = new NikseBitmap(Width, Height);
for (int y = 0; y < Height; y++)
{
for (int x = 0; x < Width; x++)
{
nbmp.SetPixel(x, y, this.GetPixel(x, y));
}
}
return nbmp.GetBitmap();
}
示例10: GenerateImageFromTextWithStyle
//.........这里部分代码省略.........
{
if (text.Substring(i).ToLower().Replace("</font>", string.Empty).Length > 0)
{
if (lastText.EndsWith(' ') && !sb.StartsWith(' '))
{
string t = sb.ToString();
sb.Clear();
sb.Append(' ');
sb.Append(t);
}
float addLeft = 0;
int oldPathPointIndex = path.PointCount - 1;
if (oldPathPointIndex < 0)
oldPathPointIndex = 0;
if (sb.Length > 0)
{
TextDraw.DrawText(font, sf, path, sb, isItalic, subtitleFontBold, false, left, top, ref newLine, leftMargin, ref newLinePathPoint);
}
if (path.PointCount > 0)
{
PointF[] list = (PointF[])path.PathPoints.Clone(); // avoid using very slow path.PathPoints indexer!!!
for (int k = oldPathPointIndex; k < list.Length; k++)
{
if (list[k].X > addLeft)
addLeft = list[k].X;
}
}
if (addLeft == 0)
addLeft = left + 2;
left = addLeft;
if (_borderWidth > 0)
g.DrawPath(new Pen(_borderColor, _borderWidth), path);
g.FillPath(new SolidBrush(c), path);
path.Reset();
//path = new GraphicsPath();
sb = new StringBuilder();
if (colorStack.Count > 0)
c = colorStack.Pop();
}
i += 6;
}
else if (text.Substring(i).ToLower().StartsWith("<i>"))
{
italicFromStart = i == 0;
if (sb.Length > 0)
{
TextDraw.DrawText(font, sf, path, sb, isItalic, subtitleFontBold, false, left, top, ref newLine, leftMargin, ref newLinePathPoint);
}
isItalic = true;
i += 2;
}
else if (text.Substring(i).ToLower().StartsWith("</i>") && isItalic)
{
if (lastText.EndsWith(' ') && !sb.StartsWith(' '))
{
string t = sb.ToString();
sb.Clear();
sb.Append(' ');
sb.Append(t);
}
TextDraw.DrawText(font, sf, path, sb, isItalic, subtitleFontBold, false, left, top, ref newLine, leftMargin, ref newLinePathPoint);
isItalic = false;
i += 3;
}
else if (text.Substring(i).StartsWith(Environment.NewLine))
{
TextDraw.DrawText(font, sf, path, sb, isItalic, subtitleFontBold, false, left, top, ref newLine, leftMargin, ref newLinePathPoint);
top += lineHeight;
newLine = true;
i += Environment.NewLine.Length - 1;
lineNumber++;
if (lineNumber < lefts.Count)
{
leftMargin = lefts[lineNumber];
left = leftMargin;
}
if (isItalic)
italicFromStart = true;
}
else
{
sb.Append(text.Substring(i, 1));
}
i++;
}
if (sb.Length > 0)
TextDraw.DrawText(font, sf, path, sb, isItalic, subtitleFontBold, false, left, top, ref newLine, leftMargin, ref newLinePathPoint);
sf.Dispose();
if (_borderWidth > 0)
g.DrawPath(new Pen(_borderColor, _borderWidth), path);
g.FillPath(new SolidBrush(c), path);
g.Dispose();
var nbmp = new NikseBitmap(bmp);
nbmp.CropTransparentSidesAndBottom(2, true);
return nbmp.GetBitmap();
}
示例11: listBoxFileNames_SelectedIndexChanged
private void listBoxFileNames_SelectedIndexChanged(object sender, EventArgs e)
{
labelNOcrCharInfo.Text = string.Empty;
if (listBoxFileNames.SelectedIndex < 0)
return;
_nocrChar = listBoxFileNames.Items[listBoxFileNames.SelectedIndex] as NOcrChar;
if (_nocrChar == null)
{
pictureBoxCharacter.Invalidate();
groupBoxCurrentCompareImage.Enabled = false;
listBoxLinesForeground.Items.Clear();
listBoxlinesBackground.Items.Clear();
}
else
{
textBoxText.Text = _nocrChar.Text;
checkBoxItalic.Checked = _nocrChar.Italic;
pictureBoxCharacter.Invalidate();
groupBoxCurrentCompareImage.Enabled = true;
labelNOcrCharInfo.Text = string.Format("Size: {0}x{1}, margin top: {2} ", _nocrChar.Width, _nocrChar.Height, _nocrChar.MarginTop);
if (pictureBoxCharacter.Image != null)
{
if (IsMatch())
{
groupBoxCurrentCompareImage.BackColor = Color.LightGreen;
}
else
{
groupBoxCurrentCompareImage.BackColor = Control.DefaultBackColor;
}
}
_drawLineOn = false;
_history = new List<NOcrChar>();
_historyIndex = -1;
if (_bitmap == null)
{
var bitmap = new Bitmap(_nocrChar.Width, _nocrChar.Height);
var nbmp = new NikseBitmap(bitmap);
nbmp.Fill(Color.White);
pictureBoxCharacter.Image = nbmp.GetBitmap();
SizePictureBox();
ShowOcrPoints();
bitmap.Dispose();
}
}
}
示例12: GenerateImageFromTextWithStyleInner
private static Bitmap GenerateImageFromTextWithStyleInner(MakeBitmapParameter parameter)
{
string text = parameter.P.Text;
text = RemoveSubStationAlphaFormatting(text);
text = text.Replace("<I>", "<i>");
text = text.Replace("</I>", "</i>");
text = Utilities.FixInvalidItalicTags(text);
text = text.Replace("<B>", "<b>");
text = text.Replace("</B>", "</b>");
// no support for underline
text = text.Replace("<u>", string.Empty);
text = text.Replace("</u>", string.Empty);
text = text.Replace("<U>", string.Empty);
text = text.Replace("</U>", string.Empty);
var bmp = new Bitmap(1, 1);
var g = Graphics.FromImage(bmp);
var fontSize = g.DpiY * parameter.SubtitleFontSize / 72;
Font font = SetFont(parameter, parameter.SubtitleFontSize);
var lineHeight = parameter.LineHeight; // (textSize.Height * 0.64f);
var textSize = g.MeasureString(Utilities.RemoveHtmlTags(text), font);
g.Dispose();
bmp.Dispose();
int sizeX = (int)(textSize.Width * 1.8) + 150;
int sizeY = (int)(textSize.Height * 0.9) + 50;
if (sizeX < 1)
sizeX = 1;
if (sizeY < 1)
sizeY = 1;
bmp = new Bitmap(sizeX, sizeY);
if (parameter.BackgroundColor != Color.Transparent)
{
NikseBitmap nbmpTemp = new NikseBitmap(bmp);
nbmpTemp.Fill(parameter.BackgroundColor);
var temp = nbmpTemp.GetBitmap();
bmp.Dispose();
bmp = temp;
// g.FillRectangle(new SolidBrush(parameter.BackgroundColor), 0, 0, bmp.Width, bmp.Height);
}
g = Graphics.FromImage(bmp);
// align lines with gjpqy, a bit lower
var lines = text.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
int baseLinePadding = 13;
if (parameter.SubtitleFontSize < 30)
baseLinePadding = 12;
if (parameter.SubtitleFontSize < 25)
baseLinePadding = 9;
if (lines.Length > 0)
{
if (lines[lines.Length - 1].Contains("g") || lines[lines.Length - 1].Contains("j") || lines[lines.Length - 1].Contains("p") || lines[lines.Length - 1].Contains("q") || lines[lines.Length - 1].Contains("y") || lines[lines.Length - 1].Contains(","))
{
string textNoBelow = lines[lines.Length - 1].Replace("g", "a").Replace("j", "a").Replace("p", "a").Replace("q", "a").Replace("y", "a").Replace(",", "a");
baseLinePadding -= (int)Math.Round((TextDraw.MeasureTextHeight(font, lines[lines.Length - 1], parameter.SubtitleFontBold) - TextDraw.MeasureTextHeight(font, textNoBelow, parameter.SubtitleFontBold)));
}
else
{
baseLinePadding += 1;
}
if (baseLinePadding < 0)
baseLinePadding = 0;
}
//TODO: Better baseline - test http://bobpowell.net/formattingtext.aspx
//float baselineOffset=font.SizeInPoints/font.FontFamily.GetEmHeight(font.Style)*font.FontFamily.GetCellAscent(font.Style);
//float baselineOffsetPixels = g.DpiY/72f*baselineOffset;
//baseLinePadding = (int)Math.Round(baselineOffsetPixels);
var lefts = new List<float>();
if (text.ToLower().Contains("<font") || text.ToLower().Contains("<i>"))
{
foreach (string line in text.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries))
{
string lineNoHtml = Utilities.RemoveHtmlFontTag(line.Replace("<i>", string.Empty).Replace("</i>", string.Empty));
if (parameter.AlignLeft)
lefts.Add(5);
else if (parameter.AlignRight)
lefts.Add(bmp.Width - CalcWidthViaDraw(lineNoHtml, parameter) - 15); // calculate via drawing+crop
else
lefts.Add((bmp.Width - CalcWidthViaDraw(lineNoHtml, parameter) + 5) / 2); // calculate via drawing+crop
}
}
else
{
foreach (string line in Utilities.RemoveHtmlFontTag(text.Replace("<i>", string.Empty).Replace("</i>", string.Empty)).Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries))
{
if (parameter.AlignLeft)
lefts.Add(5);
else if (parameter.AlignRight)
lefts.Add(bmp.Width - (TextDraw.MeasureTextWidth(font, line, parameter.SubtitleFontBold) + 15));
else
lefts.Add((bmp.Width - TextDraw.MeasureTextWidth(font, line, parameter.SubtitleFontBold) + 15) / 2);
}
//.........这里部分代码省略.........
示例13: GenerateImageFromTextWithStyle
private Bitmap GenerateImageFromTextWithStyle(Paragraph p, out MakeBitmapParameter mbp)
{
mbp = new MakeBitmapParameter();
mbp.P = p;
if (_vobSubOcr != null)
{
var index = _subtitle.GetIndex(p);
if (index >= 0)
return _vobSubOcr.GetSubtitleBitmap(index);
}
mbp.AlignLeft = comboBoxHAlign.SelectedIndex == 0;
mbp.AlignRight = comboBoxHAlign.SelectedIndex == 2;
mbp.SimpleRendering = checkBoxSimpleRender.Checked;
mbp.BorderWidth = _borderWidth;
mbp.BorderColor = _borderColor;
mbp.SubtitleFontName = _subtitleFontName;
mbp.SubtitleColor = _subtitleColor;
mbp.SubtitleFontSize = _subtitleFontSize;
mbp.SubtitleFontBold = _subtitleFontBold;
mbp.LineHeight = (int) numericUpDownLineSpacing.Value;
if (_format.HasStyleSupport && !string.IsNullOrEmpty(p.Extra))
{
if (_format.GetType() == typeof(SubStationAlpha))
{
var style = AdvancedSubStationAlpha.GetSsaStyle(p.Extra, _subtitle.Header);
mbp.SubtitleColor = style.Primary;
mbp.SubtitleFontBold = style.Bold;
mbp.SubtitleFontSize = style.FontSize;
if (style.BorderStyle == "3")
{
mbp.BackgroundColor = style.Background;
}
}
else if (_format.GetType() == typeof(AdvancedSubStationAlpha))
{
var style = AdvancedSubStationAlpha.GetSsaStyle(p.Extra, _subtitle.Header);
mbp.SubtitleColor = style.Primary;
mbp.SubtitleFontBold = style.Bold;
mbp.SubtitleFontSize = style.FontSize;
if (style.BorderStyle == "3")
{
mbp.BackgroundColor = style.Outline;
}
}
}
if (comboBoxBorderWidth.SelectedItem.ToString() == Configuration.Settings.Language.ExportPngXml.BorderStyleBoxForEachLine)
{
_borderWidth = 0;
mbp.BackgroundColor = panelBorderColor.BackColor;
mbp.BoxSingleLine = true;
}
else if (comboBoxBorderWidth.SelectedItem.ToString() == Configuration.Settings.Language.ExportPngXml.BorderStyleOneBox)
{
_borderWidth = 0;
mbp.BackgroundColor = panelBorderColor.BackColor;
}
int width = 0;
int height = 0;
GetResolution(ref width, ref height);
mbp.ScreenWidth = width;
mbp.ScreenHeight = height;
mbp.Type3D = comboBox3D.SelectedIndex;
mbp.Depth3D = (int)numericUpDownDepth3D.Value;
mbp.BottomMargin = comboBoxBottomMargin.SelectedIndex;
mbp.ShadowWidth = comboBoxShadowWidth.SelectedIndex;
mbp.ShadowAlpha = (int)numericUpDownShadowTransparency.Value;
mbp.ShadowColor = panelShadowColor.BackColor;
mbp.LineHeight = (int)numericUpDownLineSpacing.Value;
if (_exportType == "VOBSUB" || _exportType == "STL" || _exportType == "SPUMUX")
{
mbp.LineJoinRound = true;
}
var bmp = GenerateImageFromTextWithStyle(mbp);
if (_exportType == "VOBSUB" || _exportType == "STL" || _exportType == "SPUMUX")
{
var nbmp = new NikseBitmap(bmp);
nbmp.ConverToFourColors(Color.Transparent, _subtitleColor, _borderColor, !checkBoxTransAntiAliase.Checked);
var temp = nbmp.GetBitmap();
bmp.Dispose();
return temp;
}
return bmp;
}
示例14: Make3DTopBottom
private static NikseBitmap Make3DTopBottom(MakeBitmapParameter parameter, NikseBitmap nbmp)
{
Bitmap singleBmp = nbmp.GetBitmap();
Bitmap singleHalfBmp = ScaleToHalfHeight(singleBmp);
singleBmp.Dispose();
Bitmap topBottomBmp = new Bitmap(parameter.ScreenWidth, parameter.ScreenHeight - parameter.BottomMargin);
int singleHeight = parameter.ScreenHeight / 2;
int leftM = (parameter.ScreenWidth / 2) - (singleHalfBmp.Width / 2);
using (Graphics gTopBottom = Graphics.FromImage(topBottomBmp))
{
gTopBottom.DrawImage(singleHalfBmp, leftM + parameter.Depth3D, singleHeight - singleHalfBmp.Height - parameter.BottomMargin);
gTopBottom.DrawImage(singleHalfBmp, leftM - parameter.Depth3D, parameter.ScreenHeight - parameter.BottomMargin - singleHalfBmp.Height);
}
nbmp = new NikseBitmap(topBottomBmp);
if (parameter.BackgroundColor == Color.Transparent)
{
nbmp.CropTop(2, Color.Transparent);
nbmp.CropTransparentSidesAndBottom(2, false);
}
else
{
nbmp.CropTop(4, parameter.BackgroundColor);
nbmp.CropSidesAndBottom(4, parameter.BackgroundColor, false);
}
return nbmp;
}
示例15: NOcrThreadDoWork
static void NOcrThreadDoWork(object sender, DoWorkEventArgs e)
{
var p = (NOcrThreadParameter)e.Argument;
e.Result = p;
var nbmpInput = new NikseBitmap(p.Picture);
nbmpInput.ReplaceNonWhiteWithTransparent();
var matches = new List<CompareMatch>();
int minLineHeight = p.NOcrLastLowercaseHeight;
if (minLineHeight < 10)
minLineHeight = 22;
int maxLineHeight = p.NOcrLastUppercaseHeight;
if (maxLineHeight < 10)
minLineHeight = 80;
List<ImageSplitterItem> lines = NikseBitmapImageSplitter.SplitVertical(nbmpInput, minLineHeight);
List<ImageSplitterItem> list = NikseBitmapImageSplitter.SplitBitmapToLetters(lines, p.NumberOfPixelsIsSpace, p.RightToLeft, Configuration.Settings.VobSubOcr.TopToBottom);
foreach (ImageSplitterItem item in list)
{
if (item.NikseBitmap != null)
{
var nbmp = item.NikseBitmap;
nbmp.ReplaceNonWhiteWithTransparent();
item.Y += nbmp.CropTopTransparent(0);
nbmp.CropTransparentSidesAndBottom(0, true);
nbmp.ReplaceTransparentWith(Color.Black);
}
}
int index = 0;
while (index < list.Count)
{
ImageSplitterItem item = list[index];
if (item.NikseBitmap == null)
{
matches.Add(new CompareMatch(item.SpecialCharacter, false, 0, null));
}
else
{
CompareMatch match = GetNOcrCompareMatch(item, nbmpInput.GetBitmap(), p);
if (match == null)
{
p.Result = string.Empty;
return;
}
else // found image match
{
matches.Add(new CompareMatch(match.Text, match.Italic, 0, null));
if (match.ExpandCount > 0)
index += match.ExpandCount - 1;
}
}
index++;
}
p.Result = GetStringWithItalicTags(matches);
}