public ResultDTO CheckExam(int examID, List <AnswerPositionDTO> answerPositionsDTO) { Dictionary <int, int> bitmapsDictionary = new Dictionary <int, int>(); int questions = 0; var bitmapList = _examsDictionary[examID]; foreach (var bitmap in bitmapList) { var pageNumber = BitmapAnalyser.GetExamPage(bitmap); var pageAnswers = answerPositionsDTO.Where(x => x.PageNumber == pageNumber).OrderBy(x => x.Y).ToList(); var standarizedBitmap = BitmapAnalyser.ResizeToStandard(bitmap); foreach (var answer in pageAnswers.OrderBy(x => x.Y)) { var answerBitmap = BitmapAnalyser.GetAnswerBitmap(standarizedBitmap, answer); var answerValue = BitmapAnalyser.CheckValue(answerBitmap); if (bitmapsDictionary.ContainsKey(answer.AnswerDTO.QuestionID) == false) { questions++; bitmapsDictionary.Add(answer.AnswerDTO.QuestionID, 1); } //check if value on paper is correct if (!(answerValue == answer.AnswerDTO.IfCorrect)) { bitmapsDictionary[answer.AnswerDTO.QuestionID] = 0; } } } return(new ResultDTO() { Points = bitmapsDictionary.Select(x => x.Value).Sum(), MaxPoints = questions, GeneratedExamID = examID }); }
public DocumentValidator(List <Bitmap> bitmapList) { _bitmapList = bitmapList; _examsDictionary = new Dictionary <int, List <Bitmap> >(); _examIDs = new List <int>(); foreach (var bitmap in _bitmapList) { using (var excractedDocument = BitmapAnalyser.ExtractDocumentFromBitmap(bitmap)) { var binaryDocument = BitmapAnalyser.getBinarizedBitmap(excractedDocument); var examID = BitmapAnalyser.GetExamID(binaryDocument); if (!_examsDictionary.ContainsKey(examID)) { _examsDictionary.Add(examID, new List <Bitmap>() { binaryDocument }); } else { _examsDictionary[examID].Add(binaryDocument); } _examIDs.Add(examID); } } }