Exemple #1
0
        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));
        }
Exemple #2
0
        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));
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
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();
                }
            }
        }
Exemple #6
0
        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;
                }
            }
        }