public async Task <IActionResult> Edit(int id, [Bind("ID,Name,Type,Attack,Defense,Text,SetId")] ReferenceCard referenceCard) { if (id != referenceCard.ID) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(referenceCard); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ReferenceCardExists(referenceCard.ID)) { return(NotFound()); } else { throw; } } return(RedirectToAction("Index")); } return(View(referenceCard)); }
public async Task <IActionResult> Create([Bind("ID,Name,Type,Attack,Defense,Text,SetId")] ReferenceCard referenceCard) { if (ModelState.IsValid) { _context.Add(referenceCard); await _context.SaveChangesAsync(); return(RedirectToAction("Index")); } return(View(referenceCard)); }
public void UpdateCard(ReferenceCard card) { var directory = Path.Combine(refCardDir, (string)card.dataRow["Set"]); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } var image = Path.Combine(directory, card.CollectorNumber + ".jpg"); if (!File.Exists(image)) { } Phash.ph_dct_imagehash(image, ref card.pHash); sql.dbNone("UPDATE cards SET pHash=" + card.pHash.ToString() + " WHERE id=" + card.Id); }
public override int Run(String[] remainingArguments) { ReferenceCardDatabase database = new ReferenceCardDatabase(); ReferenceCardRadialHashDetector detector = new ReferenceCardRadialHashDetector(); using (StreamReader streamReader = File.OpenText(GathererDatabasePath)) using (JsonTextReader reader = new JsonTextReader(streamReader)) { JObject root = JToken.ReadFrom(reader) as JObject; JObject cards = root.GetValue("MTGCardInfo") as JObject; Dictionary <int, GathererCardData> cardDictionary = cards.ToObject <Dictionary <int, GathererCardData> >(); foreach (KeyValuePair <int, GathererCardData> pair in cardDictionary) { ReferenceCard card = new ReferenceCard { Name = pair.Value.name }; database.Add(pair.Key, card); } } String[] paths = Directory.GetFiles(GathererImagesPath, "*.jpg", SearchOption.AllDirectories); foreach (String path in paths) { String imageIDStr = Path.GetFileNameWithoutExtension(path); int imageID; if (int.TryParse(imageIDStr, out imageID)) { detector.AddHash(imageID, path); } } using (Stream stream = File.OpenWrite(ExportDatabasePath)) { database.Export(stream); } using (Stream stream = File.OpenWrite(ExportDetectorPath)) { detector.Export(stream); } return(0); }
private void matchCard() { var cardTempId = 0; foreach (MagicCard card in magicCards) { cardTempId++; // Write the image to disk to be read by the pHash library.. should really find // a way to pass a pointer to image data directly card.cardArtBitmap.Save("tempCard" + cardTempId + ".jpg", ImageFormat.Jpeg); // Calculate art bitmap hash UInt64 cardHash = 0; Phash.ph_dct_imagehash("tempCard" + cardTempId + ".jpg", ref cardHash); var lowestHamming = int.MaxValue; ReferenceCard bestMatch = null; foreach (ReferenceCard referenceCard in referenceCards) { int hamming = Phash.HammingDistance(referenceCard.pHash, cardHash); if (hamming < lowestHamming) { lowestHamming = hamming; bestMatch = referenceCard; } } if (bestMatch != null) { card.referenceCard = bestMatch; card.hammingValue = lowestHamming; //Debug.WriteLine("Highest Similarity: " + bestMatch.name + " ID: " + bestMatch.cardId.ToString()); Graphics g = Graphics.FromImage(cameraBitmap); var font = new Font("Tahoma", 25); g.DrawString(bestMatch.Name, font, Brushes.Black, new PointF(card.corners[0].X - 29, card.corners[0].Y - 39)); g.DrawString(bestMatch.Name, font, Brushes.Yellow, new PointF(card.corners[0].X - 30, card.corners[0].Y - 40)); g.Dispose(); } } }
private void loadSourceCards() { using (DataTable Reader = sql.dbResult("SELECT * FROM cards")) { foreach (DataRow r in Reader.Rows) { var card = new ReferenceCard(r); referenceCards.Add(card); } } if (!referenceCards.Any()) { using (var setImporter = new SetImporter(referenceCards, sql)) { setImporter.Show(); hashCalcButton.Enabled = false; } } }