public int Add(BinaryOcrBitmap bob) { int index; if (bob.ExpandCount > 0) { index = FindExactMatchExpanded(bob); if (index == -1 || CompareImagesExpanded[index].ExpandCount != bob.ExpandCount) { CompareImagesExpanded.Add(bob); } else { bool allAlike = true; for (int i=0; i < bob.ExpandCount-1; i++) { if (bob.ExpandedList[i].Hash != CompareImagesExpanded[index].ExpandedList[i].Hash) allAlike = false; } if (!allAlike) CompareImages.Add(bob); else System.Windows.Forms.MessageBox.Show("Expanded image already in db!"); } } else { index = FindExactMatch(bob); if (index == -1) CompareImages.Add(bob); else System.Windows.Forms.MessageBox.Show("Image already in db!"); } return index; }
public void LoadCompareImages() { var list = new List<BinaryOcrBitmap>(); if (!File.Exists(FileName)) { CompareImages = list; return; } using (Stream fs = File.OpenRead(FileName)) { using (Stream gz = new GZipStream(fs, CompressionMode.Decompress)) { bool done = false; while (!done) { var bob = new BinaryOcrBitmap(gz); if (bob.LoadedOK) list.Add(bob); else done = true; } } } CompareImages = list; }
public void TestMethodBinOcrSaveLoad() { string tempFileName = System.IO.Path.GetTempFileName(); var db = new BinaryOcrDb(tempFileName); var nbmp = new NikseBitmap(2, 2); nbmp.SetPixel(0, 0, Color.Transparent); nbmp.SetPixel(1, 0, Color.Transparent); nbmp.SetPixel(1, 0, Color.Transparent); nbmp.SetPixel(1, 1, Color.White); var bob = new BinaryOcrBitmap(nbmp); bob.Text = "Debug"; db.Add(bob); nbmp.SetPixel(0, 0, Color.White); var bob2 = new BinaryOcrBitmap(nbmp); bob2.X = 2; bob2.Y = 4; bob2.Text = "tt"; bob2.Italic = true; bob2.ExpandCount = 2; bob2.ExpandedList = new System.Collections.Generic.List<BinaryOcrBitmap>(); bob2.ExpandedList.Add(bob2); db.Add(bob2); db.Save(); db = new BinaryOcrDb(tempFileName, true); Assert.IsTrue(db.CompareImages.Count == 1); Assert.IsTrue(db.CompareImagesExpanded.Count == 1); Assert.IsTrue(bob.Width == db.CompareImages[0].Width); Assert.IsTrue(bob.Height == db.CompareImages[0].Height); Assert.IsTrue(bob.NumberOfColoredPixels == db.CompareImages[0].NumberOfColoredPixels); Assert.IsTrue(bob.Hash == db.CompareImages[0].Hash); Assert.IsTrue(bob.Italic == db.CompareImages[0].Italic); Assert.IsTrue(bob.ExpandCount == db.CompareImages[0].ExpandCount); Assert.IsTrue(bob.Text == db.CompareImages[0].Text); Assert.IsTrue(bob2.Width == db.CompareImagesExpanded[0].Width); Assert.IsTrue(bob2.Height == db.CompareImagesExpanded[0].Height); Assert.IsTrue(bob2.NumberOfColoredPixels == db.CompareImagesExpanded[0].NumberOfColoredPixels); Assert.IsTrue(bob2.Hash == db.CompareImagesExpanded[0].Hash); Assert.IsTrue(bob2.Italic == db.CompareImagesExpanded[0].Italic); Assert.IsTrue(bob2.ExpandCount == db.CompareImagesExpanded[0].ExpandCount); Assert.IsTrue(bob2.Text == db.CompareImagesExpanded[0].Text); Assert.IsTrue(bob2.X == db.CompareImagesExpanded[0].X); Assert.IsTrue(bob2.Y == db.CompareImagesExpanded[0].Y); try { System.IO.File.Delete(tempFileName); } catch { } }
public int FindExactMatch(BinaryOcrBitmap bob) { for (int i = 0; i < CompareImages.Count; i++) { var b = CompareImages[i]; if (bob.Hash == b.Hash && bob.Width == b.Width && bob.Height == b.Height && bob.NumberOfColoredPixels == b.NumberOfColoredPixels) return i; } return -1; }
public int FindExactMatchExpanded(BinaryOcrBitmap bob) { for (int i = 0; i < CompareImagesExpanded.Count; i++) { var b = CompareImagesExpanded[i]; if (bob.Hash == b.Hash && bob.Width == b.Width && bob.Height == b.Height && bob.NumberOfColoredPixels == b.NumberOfColoredPixels) { return(i); } } return(-1); }
public void LoadCompareImages() { var list = new List <BinaryOcrBitmap>(); var expandList = new List <BinaryOcrBitmap>(); if (!File.Exists(FileName)) { CompareImages = list; return; } using (Stream fs = File.OpenRead(FileName)) { using (Stream gz = new GZipStream(fs, CompressionMode.Decompress)) { bool done = false; while (!done) { var bob = new BinaryOcrBitmap(gz); if (bob.LoadedOK) { if (bob.ExpandCount > 0) { expandList.Add(bob); bob.ExpandedList = new List <BinaryOcrBitmap>(); for (int i = 1; i < bob.ExpandCount; i++) { var expandedBob = new BinaryOcrBitmap(gz); if (expandedBob.LoadedOK) { bob.ExpandedList.Add(expandedBob); } else { break; } } } else { list.Add(bob); } } else { done = true; } } } } CompareImages = list; CompareImagesExpanded = expandList; }
public int Add(BinaryOcrBitmap bob) { int index; if (bob.ExpandCount > 0) { index = FindExactMatchExpanded(bob); if (index == -1 || CompareImagesExpanded[index].ExpandCount != bob.ExpandCount) { CompareImagesExpanded.Add(bob); } else { bool allAlike = true; for (int i = 0; i < bob.ExpandCount - 1; i++) { if (bob.ExpandedList[i].Hash != CompareImagesExpanded[index].ExpandedList[i].Hash) { allAlike = false; } } if (!allAlike) { CompareImages.Add(bob); } else { System.Windows.Forms.MessageBox.Show("Expanded image already in db!"); } } } else { index = FindExactMatch(bob); if (index == -1) { CompareImages.Add(bob); } else { System.Windows.Forms.MessageBox.Show("Image already in db!"); } } return(index); }
internal static unsafe int IsBitmapsAlike(NikseBitmap bmp1, OCR.Binary.BinaryOcrBitmap bmp2) { int different = 0; int maxDiff = bmp1.Width * bmp1.Height / 5; for (int x = 1; x < bmp1.Width; x++) { for (int y = 1; y < bmp1.Height; y++) { if (bmp1.GetAlpha(x, y) < 100 && bmp2.GetPixel(x, y) > 0) { different++; } } if (different > maxDiff) { return(different + 10); } } return(different); }
private string SaveCompareItemNew(ImageSplitterItem newTarget, string text, bool isItalic, List<ImageSplitterItem> expandList) { int expandCount = 0; if (expandList != null) expandCount = expandList.Count; if (expandCount > 0) { var bob = new BinaryOcrBitmap(expandList[0].NikseBitmap, isItalic, expandCount, text, expandList[0].X, expandList[0].Y); bob.ExpandedList = new List<BinaryOcrBitmap>(); for (int j = 1; j < expandList.Count; j++) { var expandedBob = new BinaryOcrBitmap(expandList[j].NikseBitmap); expandedBob.X = expandList[j].X; expandedBob.Y = expandList[j].Y; bob.ExpandedList.Add(expandedBob); } _binaryOcrDb.Add(bob); _binaryOcrDb.Save(); return bob.Key; } else { var bob = new BinaryOcrBitmap(newTarget.NikseBitmap, isItalic, expandCount, text, newTarget.X, newTarget.Y); _binaryOcrDb.Add(bob); _binaryOcrDb.Save(); return bob.Key; } }
private CompareMatch GetCompareMatchNew(ImageSplitterItem targetItem, NikseBitmap parentBitmap, out CompareMatch secondBestGuess, List<ImageSplitterItem> list, int listIndex) { double maxDiff = (double)numericUpDownMaxErrorPct.Value; secondBestGuess = null; int index = 0; int smallestDifference = 10000; int smallestIndex = -1; NikseBitmap target = targetItem.NikseBitmap; if (_binaryOcrDb == null) { secondBestGuess = null; return null; } var bob = new BinaryOcrBitmap(target); for (int k = 0; k < _binaryOcrDb.CompareImagesExpanded.Count; k++) { var b = _binaryOcrDb.CompareImagesExpanded[k]; if (bob.Hash == b.Hash && bob.Width == b.Width && bob.Height == b.Height && bob.NumberOfColoredPixels == b.NumberOfColoredPixels) { bool ok = false; for (int i = 0; i < b.ExpandedList.Count; i++) { if (listIndex + i + 1 < list.Count && list[listIndex + i + 1].NikseBitmap != null && b.ExpandedList[i].Hash == new BinaryOcrBitmap(list[listIndex + i + 1].NikseBitmap).Hash) { ok = true; } else { ok = false; break; } } if (ok) { secondBestGuess = null; return new CompareMatch(b.Text, b.Italic, b.ExpandCount, b.Key); } } } FindBestMatchNew(ref index, ref smallestDifference, ref smallestIndex, target, _binaryOcrDb, bob, maxDiff); if (smallestIndex >= 0) { double differencePercentage = smallestDifference * 100.0 / (target.Width * target.Height); if (differencePercentage <= maxDiff) { var hit = _binaryOcrDb.CompareImages[smallestIndex]; string text = hit.Text; if (smallestDifference > 0) { int h = hit.Height; if (text == "V" || text == "W" || text == "U" || text == "S" || text == "Z" || text == "O" || text == "X" || text == "Ø" || text == "C") { if (_binOcrLastLowercaseHeight > 3 && h - _binOcrLastLowercaseHeight < 2) text = text.ToLower(); } else if (text == "v" || text == "w" || text == "u" || text == "s" || text == "z" || text == "o" || text == "x" || text == "ø" || text == "c") { if (_binOcrLastUppercaseHeight > 3 && _binOcrLastUppercaseHeight - h < 2) text = text.ToUpper(); } } else { SetBinOcrLowercaseUppercase(hit.Height, text); } return new CompareMatch(text, hit.Italic, hit.ExpandCount, hit.Key); } var guess = _binaryOcrDb.CompareImages[smallestIndex]; secondBestGuess = new CompareMatch(guess.Text, guess.Italic, guess.ExpandCount, guess.Key); } return null; }
private static void FindBestMatchNew(ref int index, ref int smallestDifference, ref int smallestIndex, NikseBitmap target, BinaryOcrDb binOcrDb, BinaryOcrBitmap bob, double maxDiff) { var bobExactMatch = binOcrDb.FindExactMatch(bob); if (bobExactMatch >= 0) { index = bobExactMatch; smallestDifference = 0; smallestIndex = bobExactMatch; return; } if (maxDiff < 0.2 || target.Width < 3 || target.Height < 5) return; int numberOfForegroundColors = bob.NumberOfColoredPixels; int minForeColorMatch = 90; index = 0; foreach (var compareItem in binOcrDb.CompareImages) { if (compareItem.Width == target.Width && compareItem.Height == target.Height) // precise math in size { if (Math.Abs(compareItem.NumberOfColoredPixels - numberOfForegroundColors) < 3) { int dif = NikseBitmapImageSplitter.IsBitmapsAlike(compareItem, target); if (dif < smallestDifference) { smallestDifference = dif; smallestIndex = index; if (dif < 3) { break; // foreach ending } } } } index++; } if (smallestDifference > 1) { index = 0; foreach (var compareItem in binOcrDb.CompareImages) { if (compareItem.Width == target.Width && compareItem.Height == target.Height) // precise math in size { if (Math.Abs(compareItem.NumberOfColoredPixels - numberOfForegroundColors) < 40) { int dif = NikseBitmapImageSplitter.IsBitmapsAlike(compareItem, target); if (dif < smallestDifference) { smallestDifference = dif; smallestIndex = index; if (dif == 0) { break; // foreach ending } } } } index++; } } if (target.Width > 5 && smallestDifference > 2) // for other than very narrow letter (like 'i' and 'l' and 'I'), try more sizes { index = 0; foreach (var compareItem in binOcrDb.CompareImages) { if (compareItem.Width == target.Width && compareItem.Height == target.Height - 1) { if (Math.Abs(compareItem.NumberOfColoredPixels - numberOfForegroundColors) < minForeColorMatch) { int dif = NikseBitmapImageSplitter.IsBitmapsAlike(compareItem, target); if (dif < smallestDifference) { smallestDifference = dif; smallestIndex = index; if (dif == 0) break; // foreach ending } } } index++; } if (smallestDifference > 2) { index = 0; foreach (var compareItem in binOcrDb.CompareImages) { if (compareItem.Width == target.Width && compareItem.Height == target.Height + 1) { if (Math.Abs(compareItem.NumberOfColoredPixels - numberOfForegroundColors) < minForeColorMatch) { int dif = NikseBitmapImageSplitter.IsBitmapsAlike(target, compareItem); if (dif < smallestDifference) { smallestDifference = dif; smallestIndex = index; if (dif == 0) break; // foreach ending } } } index++; } } if (smallestDifference > 3) { index = 0; foreach (var compareItem in binOcrDb.CompareImages) { if (compareItem.Width == target.Width + 1 && compareItem.Height == target.Height + 1) { if (Math.Abs(compareItem.NumberOfColoredPixels - numberOfForegroundColors) < minForeColorMatch) { int dif = NikseBitmapImageSplitter.IsBitmapsAlike(target, compareItem); if (dif < smallestDifference) { smallestDifference = dif; smallestIndex = index; if (dif == 0) break; // foreach ending } } } index++; } } if (smallestDifference > 5) { index = 0; foreach (var compareItem in binOcrDb.CompareImages) { if (compareItem.Width == target.Width - 1 && compareItem.Height == target.Height) { if (Math.Abs(compareItem.NumberOfColoredPixels - numberOfForegroundColors) < minForeColorMatch) { int dif = NikseBitmapImageSplitter.IsBitmapsAlike(compareItem, target); if (dif < smallestDifference) { smallestDifference = dif; smallestIndex = index; if (dif == 0) break; // foreach ending } } } index++; } } if (smallestDifference > 5) { index = 0; foreach (var compareItem in binOcrDb.CompareImages) { if (compareItem.Width == target.Width - 1 && compareItem.Height == target.Height - 1) { if (Math.Abs(compareItem.NumberOfColoredPixels - numberOfForegroundColors) < minForeColorMatch) { int dif = NikseBitmapImageSplitter.IsBitmapsAlike(compareItem, target); if (dif < smallestDifference) { smallestDifference = dif; smallestIndex = index; if (dif == 0) break; // foreach ending } } } index++; } } if (smallestDifference > 5) { index = 0; foreach (var compareItem in binOcrDb.CompareImages) { if (compareItem.Width - 1 == target.Width && compareItem.Height == target.Height) { if (Math.Abs(compareItem.NumberOfColoredPixels - numberOfForegroundColors) < minForeColorMatch) { int dif = NikseBitmapImageSplitter.IsBitmapsAlike(target, compareItem); if (dif < smallestDifference) { smallestDifference = dif; smallestIndex = index; if (dif == 0) break; // foreach ending } } } index++; } } if (smallestDifference > 9 && target.Width > 11) { index = 0; foreach (var compareItem in binOcrDb.CompareImages) { if (compareItem.Width == target.Width - 2 && compareItem.Height == target.Height) { if (Math.Abs(compareItem.NumberOfColoredPixels - numberOfForegroundColors) < minForeColorMatch) { int dif = NikseBitmapImageSplitter.IsBitmapsAlike(compareItem, target); if (dif < smallestDifference) { smallestDifference = dif; smallestIndex = index; if (dif == 0) break; // foreach ending } } } index++; } } if (smallestDifference > 9 && target.Width > 14) { index = 0; foreach (var compareItem in binOcrDb.CompareImages) { if (compareItem.Width == target.Width - 3 && compareItem.Height == target.Height) { if (Math.Abs(compareItem.NumberOfColoredPixels - numberOfForegroundColors) < minForeColorMatch) { int dif = NikseBitmapImageSplitter.IsBitmapsAlike(compareItem, target); if (dif < smallestDifference) { smallestDifference = dif; smallestIndex = index; if (dif == 0) break; // foreach ending } } } index++; } } if (smallestDifference > 9 && target.Width > 14) { index = 0; foreach (var compareItem in binOcrDb.CompareImages) { if (compareItem.Width == target.Width && compareItem.Height == target.Height - 3) { if (Math.Abs(compareItem.NumberOfColoredPixels - numberOfForegroundColors) < minForeColorMatch) { int dif = NikseBitmapImageSplitter.IsBitmapsAlike(compareItem, target); if (dif < smallestDifference) { smallestDifference = dif; smallestIndex = index; if (dif == 0) break; // foreach ending } } } index++; } } if (smallestDifference > 9 && target.Width > 14) { index = 0; foreach (var compareItem in binOcrDb.CompareImages) { if (compareItem.Width - 2 == target.Width && compareItem.Height == target.Height) { if (Math.Abs(compareItem.NumberOfColoredPixels - numberOfForegroundColors) < minForeColorMatch) { int dif = NikseBitmapImageSplitter.IsBitmapsAlike(target, compareItem); if (dif < smallestDifference) { smallestDifference = dif; smallestIndex = index; if (dif == 0) break; // foreach ending } } } index++; } } } if (smallestDifference == 0) { if (smallestIndex > 200) { var hit = binOcrDb.CompareImages[smallestIndex]; binOcrDb.CompareImages.RemoveAt(smallestIndex); binOcrDb.CompareImages.Insert(0, hit); smallestIndex = 0; index = 0; } } }
public Bitmap ToOldBitmap() { if (ExpandedList != null && ExpandedList.Count > 0) { int minX = X; int minY = Y; int maxX = X + Width; int maxY = Y + Height; var list = new List <BinaryOcrBitmap>(); list.Add(this); foreach (BinaryOcrBitmap bob in ExpandedList) { if (bob.X < minX) { minX = bob.X; } if (bob.Y < minY) { minY = bob.Y; } if (bob.X + bob.Width > maxX) { maxX = bob.X + bob.Width; } if (bob.Y + bob.Height > maxY) { maxY = bob.Y + bob.Height; } list.Add(bob); } var nbmp = new BinaryOcrBitmap(maxX - minX, maxY - minY); foreach (BinaryOcrBitmap bob in list) { for (int y = 0; y < bob.Height; y++) { for (int x = 0; x < bob.Width; x++) { int c = bob.GetPixel(x, y); if (c > 0) { nbmp.SetPixel(bob.X - minX + x, bob.Y - minY + y, 1); } } } } return(nbmp.ToOldBitmap()); // Resursive } else { var nbmp = new NikseBitmap(Width, Height); for (int y = 0; y < Height; y++) { for (int x = 0; x < Width; x++) { Color c = Color.Transparent; if (this.GetPixel(x, y) > 0) { c = Color.White; } nbmp.SetPixel(x, y, c); } } return(nbmp.GetBitmap()); } }
public Bitmap ToOldBitmap() { if (ExpandedList != null && ExpandedList.Count > 0) { int minX = X; int minY = Y; int maxX = X + Width; int maxY = Y + Height; var list = new List<BinaryOcrBitmap>(); list.Add(this); foreach (BinaryOcrBitmap bob in ExpandedList) { if (bob.X < minX) minX = bob.X; if (bob.Y < minY) minY = bob.Y; if (bob.X + bob.Width > maxX) maxX = bob.X + bob.Width; if (bob.Y + bob.Height > maxY) maxY = bob.Y + bob.Height; list.Add(bob); } var nbmp = new BinaryOcrBitmap(maxX - minX, maxY - minY); foreach (BinaryOcrBitmap bob in list) { for (int y = 0; y < bob.Height; y++) { for (int x = 0; x < bob.Width; x++) { int c = bob.GetPixel(x, y); if (c > 0) nbmp.SetPixel(bob.X - minX + x, bob.Y - minY + y, 1); } } } return nbmp.ToOldBitmap(); // Resursive } else { var nbmp = new NikseBitmap(Width, Height); for (int y = 0; y < Height; y++) { for (int x = 0; x < Width; x++) { Color c = Color.Transparent; if (this.GetPixel(x, y) > 0) c = Color.White; nbmp.SetPixel(x, y, c); } } return nbmp.GetBitmap(); } }
private void buttonDelete_Click(object sender, EventArgs e) { if (_selectedCompareNode == null && _selectedCompareBinaryOcrBitmap == null) return; listBoxInspectItems.Items[listBoxInspectItems.SelectedIndex] = Configuration.Settings.Language.VobSubOcr.NoMatch; if (_selectedCompareBinaryOcrBitmap != null) { if (_selectedCompareBinaryOcrBitmap.ExpandCount > 0) _binOcrDb.CompareImagesExpanded.Remove(_selectedCompareBinaryOcrBitmap); else _binOcrDb.CompareImages.Remove(_selectedCompareBinaryOcrBitmap); _selectedCompareBinaryOcrBitmap = null; } else { ImageCompareDocument.DocumentElement.RemoveChild(_selectedCompareNode); _selectedCompareNode = null; } listBoxInspectItems_SelectedIndexChanged(null, null); }
private string SaveCompareItemNew(NikseBitmap newTarget, string text, bool isItalic, int expandCount) { BinaryOcrBitmap bob = new BinaryOcrBitmap(newTarget, isItalic, expandCount, text); _binaryOcrDb.CompareImages.Add(bob); _binaryOcrDb.Save(); return text + "_" + bob.Hash.ToString(); }
private void listBoxInspectItems_SelectedIndexChanged(object sender, EventArgs e) { labelImageInfo.Text = string.Empty; labelExpandCount.Text = string.Empty; if (listBoxInspectItems.SelectedIndex < 0) return; _selectedCompareNode = null; _selectedCompareBinaryOcrBitmap = null; pictureBoxInspectItem.Image = _imageSources[listBoxInspectItems.SelectedIndex]; pictureBoxCompareBitmap.Image = null; pictureBoxCompareBitmapDouble.Image = null; int index = (listBoxInspectItems.SelectedIndex); var match = _matches[index]; _selectedMatch = match; if (!string.IsNullOrEmpty(match.Name)) { Bitmap bitmap = new Bitmap(1,1); if (_binOcrDb != null) { bool bobFound = false; foreach (BinaryOcrBitmap bob in _binOcrDb.CompareImages) { if (match.Name == bob.Key) { textBoxText.Text = bob.Text; checkBoxItalic.Checked = bob.Italic; _selectedCompareBinaryOcrBitmap = bob; bitmap = bob.ToOldBitmap(); pictureBoxCompareBitmap.Image = bitmap; pictureBoxCompareBitmapDouble.Width = bitmap.Width * 2; pictureBoxCompareBitmapDouble.Height = bitmap.Height * 2; pictureBoxCompareBitmapDouble.Image = bitmap; var matchBob = new BinaryOcrBitmap(new NikseBitmap(_imageSources[listBoxInspectItems.SelectedIndex])); if (matchBob.Hash == bob.Hash && matchBob.Width == bob.Width && matchBob.Height == bob.Height && matchBob.NumberOfColoredPixels == bob.NumberOfColoredPixels) { buttonAddBetterMatch.Enabled = false; // exact match } else { buttonAddBetterMatch.Enabled = true; } bobFound = true; break; } } if (!bobFound) { foreach (BinaryOcrBitmap bob in _binOcrDb.CompareImagesExpanded) { if (match.Name == bob.Key) { textBoxText.Text = bob.Text; checkBoxItalic.Checked = bob.Italic; _selectedCompareBinaryOcrBitmap = bob; bitmap = bob.ToOldBitmap(); pictureBoxCompareBitmap.Image = bitmap; pictureBoxCompareBitmapDouble.Width = bitmap.Width * 2; pictureBoxCompareBitmapDouble.Height = bitmap.Height * 2; pictureBoxCompareBitmapDouble.Image = bitmap; var matchBob = new BinaryOcrBitmap(new NikseBitmap(_imageSources[listBoxInspectItems.SelectedIndex])); buttonAddBetterMatch.Enabled = false; // exact match labelExpandCount.Text = string.Format("Expand count: {0}", bob.ExpandCount); break; } } } } else { foreach (XmlNode node in ImageCompareDocument.DocumentElement.ChildNodes) { if (node.Attributes["Text"] != null && node.InnerText == match.Name) { string text = node.Attributes["Text"].InnerText; string imageFileName = node.InnerText; imageFileName = Path.Combine(_directoryPath, imageFileName); textBoxText.Text = text; checkBoxItalic.Checked = node.Attributes["Italic"] != null; string databaseName = Path.Combine(_directoryPath, "Images.db"); using (var f = new FileStream(databaseName, FileMode.Open)) { try { string name = node.InnerText; int pos = Convert.ToInt32(name); f.Position = pos; ManagedBitmap mbmp = new ManagedBitmap(f); bitmap = mbmp.ToOldBitmap(); pictureBoxCompareBitmap.Image = bitmap; pictureBoxCompareBitmapDouble.Width = bitmap.Width * 2; pictureBoxCompareBitmapDouble.Height = bitmap.Height * 2; pictureBoxCompareBitmapDouble.Image = bitmap; } catch (Exception exception) { MessageBox.Show(exception.Message); } } try { labelImageInfo.Text = string.Format(Configuration.Settings.Language.VobSubEditCharacters.Image + " - {0}x{1}", bitmap.Width, bitmap.Height); } catch { } _selectedCompareNode = node; break; } } } } if (_selectedCompareNode == null && _selectedCompareBinaryOcrBitmap == null) { buttonUpdate.Enabled = false; buttonDelete.Enabled = false; buttonAddBetterMatch.Enabled = false; textBoxText.Enabled = false; textBoxText.Text = string.Empty; checkBoxItalic.Enabled = false; } else { buttonUpdate.Enabled = true; buttonDelete.Enabled = true; if (_selectedCompareNode != null) buttonAddBetterMatch.Enabled = true; textBoxText.Enabled = true; checkBoxItalic.Enabled = true; } }
public void LoadCompareImages() { var list = new List<BinaryOcrBitmap>(); var expandList = new List<BinaryOcrBitmap>(); if (!File.Exists(FileName)) { CompareImages = list; return; } using (Stream fs = File.OpenRead(FileName)) { using (Stream gz = new GZipStream(fs, CompressionMode.Decompress)) { bool done = false; while (!done) { var bob = new BinaryOcrBitmap(gz); if (bob.LoadedOK) { if (bob.ExpandCount > 0) { expandList.Add(bob); bob.ExpandedList = new List<BinaryOcrBitmap>(); for (int i = 1; i < bob.ExpandCount; i++) { var expandedBob = new BinaryOcrBitmap(gz); if (expandedBob.LoadedOK) bob.ExpandedList.Add(expandedBob); else break; } } else { list.Add(bob); } } else { done = true; } } } } CompareImages = list; CompareImagesExpanded = expandList; }
private void buttonAddBetterMatch_Click(object sender, EventArgs e) { if (listBoxInspectItems.SelectedIndex < 0) return; if (listBoxInspectItems.Items[listBoxInspectItems.SelectedIndex].ToString() == textBoxText.Text) { textBoxText.SelectAll(); textBoxText.Focus(); return; } if (_selectedCompareNode != null) { XmlNode newNode = ImageCompareDocument.CreateElement("Item"); XmlAttribute text = newNode.OwnerDocument.CreateAttribute("Text"); text.InnerText = textBoxText.Text; newNode.Attributes.Append(text); string databaseName = Path.Combine(_directoryPath, "Images.db"); FileStream f; long pos = 0; if (!File.Exists(databaseName)) { using (f = new FileStream(databaseName, FileMode.Create)) { pos = f.Position; new ManagedBitmap(pictureBoxInspectItem.Image as Bitmap).AppendToStream(f); } } else { using (f = new FileStream(databaseName, FileMode.Append)) { pos = f.Position; new ManagedBitmap(pictureBoxInspectItem.Image as Bitmap).AppendToStream(f); } } string name = pos.ToString(CultureInfo.InvariantCulture); newNode.InnerText = name; SetItalic(newNode); ImageCompareDocument.DocumentElement.AppendChild(newNode); int index = listBoxInspectItems.SelectedIndex; _matches[index].Name = name; _matches[index].ExpandCount = 0; _matches[index].Italic = checkBoxItalic.Checked; _matches[index].Text = textBoxText.Text; listBoxInspectItems.Items.Clear(); for (int i = 0; i < _matches.Count; i++) listBoxInspectItems.Items.Add(_matches[i].Text); listBoxInspectItems.SelectedIndex = index; listBoxInspectItems_SelectedIndexChanged(null, null); } else if (_selectedCompareBinaryOcrBitmap != null) { var nbmp = new NikseBitmap((pictureBoxInspectItem.Image as Bitmap)); int x = 0; int y = 0; if (_selectedMatch != null && _selectedMatch.ImageSplitterItem != null) { x = _selectedMatch.X; y = _selectedMatch.Y; } var bob = new BinaryOcrBitmap(nbmp, checkBoxItalic.Checked, 0, textBoxText.Text, x, y); _binOcrDb.Add(bob); int index = listBoxInspectItems.SelectedIndex; _matches[index].Name = bob.Key; _matches[index].ExpandCount = 0; _matches[index].Italic = checkBoxItalic.Checked; _matches[index].Text = textBoxText.Text; listBoxInspectItems.Items.Clear(); for (int i = 0; i < _matches.Count; i++) listBoxInspectItems.Items.Add(_matches[i].Text); listBoxInspectItems.SelectedIndex = index; listBoxInspectItems_SelectedIndexChanged(null, null); } }