git » fp-git.git » commit 4cdda14

added third debug bitmap file

author peter_k
2005-07-07 19:22:59 UTC
committer peter_k
2005-07-07 19:22:59 UTC
parent ed51ffb5fbaf360c9d83f0f02582662eaa4bc666

added third debug bitmap file

poprecog/poprecog.c +96 -51

diff --git a/poprecog/poprecog.c b/poprecog/poprecog.c
index 8746c03..4857fae 100644
--- a/poprecog/poprecog.c
+++ b/poprecog/poprecog.c
@@ -111,7 +111,6 @@ typedef struct sRecognized {
 	int imageID;
 	int posX, posY;
 	int goodPixels;
-	int goodPixels2;  
 	int layer;
 	int pixelsNumber;  
 	int upperLayers;  
@@ -160,6 +159,8 @@ int dirsNumber;
 
 tRecognized recognized[MAX_RECOGNIZED_ITEMS];
 int recognizedNumber;
+tRecognized recognized2[MAX_RECOGNIZED_ITEMS];
+int recognized2Number;
 int totalNumberOfRecognizedImages;
 int actualLayer;
 int recognizeMap[320][200]; /* here are stored information which 'recognize result' have this pixel */
@@ -198,6 +199,23 @@ int cmptImage(const void *a, const void *b) {
 	return 0;
 }
 
+int cmptRecognized(void *a, void *b)
+{
+	register int laa = ((tRecognized*)(a))->layer;
+	register int lab = ((tRecognized*)(b))->layer; 
+	register int pxa = ((tRecognized*)(a))->goodPixels;
+	register int pxb = ((tRecognized*)(b))->goodPixels;
+	if (laa > lab)
+		return -1;
+	if (laa < lab)
+		return 1;
+	if (pxa > pxb)
+		return -1;
+	if (pxa < pxb)
+		return 1;
+	return 0;
+}
+
 /*inline*/ int findImageOnScreenShotInPosition(int imageID, int posX, int posY) {
 	register int i, x, y;
 	register short transparentPixel = makecol16(0, 0, 0);
@@ -395,7 +413,6 @@ int findImageOnScreenShot(int imageID) {
 				recognized[newRecognized].posX = posX;  
 				recognized[newRecognized].posY = posY;
 				recognized[newRecognized].goodPixels = tmp;
-				recognized[newRecognized].goodPixels2 = tmp;          
 				recognized[newRecognized].goodPixelsPercent = (recognized[newRecognized].goodPixels*65536)/image[recognized[newRecognized].imageID].pixelsNumber;
 				recognized[newRecognized].ownedPixels = 0;
 				recognized[newRecognized].pixelsNumber = image[imageID].pixelsNumber;
@@ -411,12 +428,13 @@ int findImageOnScreenShot(int imageID) {
 
 void recognizeScreenShot(int screenShotID) {
 	char buf[100];
-	int x;  
+	int x, y;  
 	int i, j, tmp;
 	int maxPixelsNumber, maxPixelsID, maxTotalPixelsNumber;
 	int recognizedNow, recognizedBefore;
 	int timeBefore, timeAfter;
 	int everythingRecognized;
+	int transparentPixel = makecol16(0, 0, 0);	
  
 	timeBefore = time(0);
 	printf(POPRECOG_RECOGNIZING, screenShotList[screenShotID], screenShotID+1, screenShotsNumber);
@@ -425,11 +443,12 @@ void recognizeScreenShot(int screenShotID) {
 	sprintf(buf, "%s" SEPS "%s", screenShotsDir, screenShotList[screenShotID]);
 	screenShot = load_bmp(buf, 0);
 	transparentScreenShot = load_bmp(buf, 0);  
-	DEBUGScreenShot2 = load_bmp(buf, 0);  
 	DEBUGScreenShot = create_bitmap(500, 400);
 	clear_to_color(DEBUGScreenShot, makecol(50, 50, 50));
-	blit(screenShot, DEBUGScreenShot, 0, 0, 0, 200, 320, 200);  
+	blit(screenShot, DEBUGScreenShot, 0, 0, 0, 200, 320, 200);
 	line(DEBUGScreenShot, 320, 0, 320, 399, makecol(255, 255, 255));  
+	DEBUGScreenShot2 = create_bitmap(320, 400);
+  blit(screenShot, DEBUGScreenShot2, 0, 0, 0, 200, 320, 200);	
 	totalNumberOfRecognizedImages = 0;  
 	recognizedNumber = 0;
 	actualLayer = 0;
@@ -483,7 +502,8 @@ void recognizeScreenShot(int screenShotID) {
 	
 	for (i = 0; i < recognizedNumber; i++)
 		recognized[i].ownedPixels = 0;  
-
+		
+	recognized2Number = 0;
 	while (1)	{
 		maxPixelsNumber = 0;
 		maxTotalPixelsNumber = 0;    
@@ -510,62 +530,87 @@ void recognizeScreenShot(int screenShotID) {
 				cutImageFromDEBUGScreenShot(maxPixelsID, recognized[maxPixelsID].posX, recognized[maxPixelsID].posY);
 			cutImageFromScreenShot(maxPixelsID, recognized[maxPixelsID].posX, recognized[maxPixelsID].posY);
 			putImageOnRecognizeMap(image[recognized[maxPixelsID].imageID].bitmap, recognized[maxPixelsID].posX, recognized[maxPixelsID].posY, maxPixelsID);
+			
+			recognized2[recognized2Number].imageID =  recognized[maxPixelsID].imageID;
+			recognized2[recognized2Number].posX =  recognized[maxPixelsID].posX;
+			recognized2[recognized2Number].posY =  recognized[maxPixelsID].posY;
+			recognized2[recognized2Number].goodPixels =  recognized[maxPixelsID].goodPixels;
+			recognized2[recognized2Number].layer =  recognized[maxPixelsID].layer;
+			recognized2[recognized2Number].pixelsNumber =  recognized[maxPixelsID].pixelsNumber;
+			recognized2[recognized2Number].upperLayers =  recognized[maxPixelsID].upperLayers;
+			recognized2[recognized2Number].goodPixelsPercent =  recognized[maxPixelsID].goodPixelsPercent;
+			recognized2[recognized2Number].ownedPixels =  recognized[maxPixelsID].ownedPixels;
+			recognized2Number++;
 
-			/* Print results */
-			printf("    " POPRECOG_FOUND,
-				image[recognized[maxPixelsID].imageID].filePath,
-				image[recognized[maxPixelsID].imageID].direction,
-				recognized[maxPixelsID].layer,
-				recognized[maxPixelsID].posX,
-				recognized[maxPixelsID].posY,
-				image[recognized[maxPixelsID].imageID].bitmap->w,
-				image[recognized[maxPixelsID].imageID].bitmap->h,
-				(image[recognized[maxPixelsID].imageID].direction=='-') ?
-					(recognized[maxPixelsID].posX) :
-					(recognized[maxPixelsID].posX+image[recognized[maxPixelsID].imageID].bitmap->w
-				),
-				recognized[maxPixelsID].posY+image[recognized[maxPixelsID].imageID].bitmap->h
-			);
-			fprintf(outputFile, "    " POPRECOG_FOUND,
-				image[recognized[maxPixelsID].imageID].filePath,
-				image[recognized[maxPixelsID].imageID].direction,
-				recognized[maxPixelsID].layer,
-				recognized[maxPixelsID].posX,
-				recognized[maxPixelsID].posY,
-				image[recognized[maxPixelsID].imageID].bitmap->w,
-				image[recognized[maxPixelsID].imageID].bitmap->h,
-				(image[recognized[maxPixelsID].imageID].direction=='-') ?
-					(recognized[maxPixelsID].posX) :
-					(recognized[maxPixelsID].posX+image[recognized[maxPixelsID].imageID].bitmap->w
-				),
-				recognized[maxPixelsID].posY+image[recognized[maxPixelsID].imageID].bitmap->h
-			);			
-			fprintf(outputSmallFile, POPRECOG_FOUND,
-				image[recognized[maxPixelsID].imageID].filePath,
-				image[recognized[maxPixelsID].imageID].direction,
-				recognized[maxPixelsID].layer,
-				recognized[maxPixelsID].posX,
-				recognized[maxPixelsID].posY,
-				image[recognized[maxPixelsID].imageID].bitmap->w,
-				image[recognized[maxPixelsID].imageID].bitmap->h,
-				(image[recognized[maxPixelsID].imageID].direction=='-') ?
-					(recognized[maxPixelsID].posX) :
-					(recognized[maxPixelsID].posX+image[recognized[maxPixelsID].imageID].bitmap->w
-				),
-				recognized[maxPixelsID].posY+image[recognized[maxPixelsID].imageID].bitmap->h
-			);
 			recognized[maxPixelsID].goodPixels = 0;
 		}
 		else
 			break;
 	}
 	
+	qsort(recognized2, recognized2Number, sizeof(tRecognized), cmptRecognized);
+	
+	/* Print results */
+	
+	for (i = 0; i < recognized2Number; i++) {
+		printf("    " POPRECOG_FOUND,
+			image[recognized2[i].imageID].filePath,
+			image[recognized2[i].imageID].direction,
+			recognized2[i].layer,
+			recognized2[i].posX,
+			recognized2[i].posY,
+			image[recognized2[i].imageID].bitmap->w,
+			image[recognized2[i].imageID].bitmap->h,
+			(image[recognized2[i].imageID].direction=='-') ?
+				(recognized2[i].posX) :
+				(recognized2[i].posX+image[recognized2[i].imageID].bitmap->w
+			),
+			recognized2[i].posY+image[recognized2[i].imageID].bitmap->h
+		);
+		fprintf(outputFile, "    " POPRECOG_FOUND,
+			image[recognized2[i].imageID].filePath,
+			image[recognized2[i].imageID].direction,
+			recognized2[i].layer,
+			recognized2[i].posX,
+			recognized2[i].posY,
+			image[recognized2[i].imageID].bitmap->w,
+			image[recognized2[i].imageID].bitmap->h,
+			(image[recognized2[i].imageID].direction=='-') ?
+				(recognized2[i].posX) :
+				(recognized2[i].posX+image[recognized2[i].imageID].bitmap->w
+			),
+			recognized2[i].posY+image[recognized2[i].imageID].bitmap->h
+		);
+		fprintf(outputSmallFile, POPRECOG_FOUND,
+			image[recognized2[i].imageID].filePath,
+			image[recognized2[i].imageID].direction,
+			recognized2[i].layer,
+			recognized2[i].posX,
+			recognized2[i].posY,
+			image[recognized2[i].imageID].bitmap->w,
+			image[recognized2[i].imageID].bitmap->h,
+			(image[recognized2[i].imageID].direction=='-') ?
+				(recognized2[i].posX) :
+				(recognized2[i].posX+image[recognized2[i].imageID].bitmap->w
+			),
+			recognized2[i].posY+image[recognized2[i].imageID].bitmap->h
+		);				
+		if (dirInfo[image[recognized2[i].imageID].dirID].optGoodNumber)
+			for (x = 0; x < image[recognized2[i].imageID].bitmap->w; x++)
+				for (y = 0; y < image[recognized2[i].imageID].bitmap->h; y++) {
+					if ((((short *)image[recognized2[i].imageID].bitmap->line[y])[x] != transparentPixel) || (!dirInfo[image[recognized2[i].imageID].dirID].optAllowTransparency)) 
+						((short *)DEBUGScreenShot2->line[recognized2[i].posY+y])[recognized2[i].posX+x] = ((short *)image[recognized2[i].imageID].bitmap->line[y])[x];
+				}
+	}
+	
 	textprintf_ex(DEBUGScreenShot, font, 320+2, 1, makecol(255, 255, 255), makecol(50, 50, 50), POPRECOG_DEBUG_HEADER, screenShotList[screenShotID], screenShotID+1, screenShotsNumber);
 	textprintf_ex(DEBUGScreenShot, font, 320+2, 10, makecol(255, 255, 255), makecol(50, 50, 50), POPRECOG_DEBUG_RECOGNIZED_NR, totalNumberOfRecognizedImages);
 	sprintf(buf, "%s/trans_%s.bmp", optResultsDir, screenShotList[screenShotID]);
 	save_bitmap(buf, transparentScreenShot, 0);
 	sprintf(buf, "%s/rec_%s.bmp", optResultsDir, screenShotList[screenShotID]);
-	save_bitmap(buf, DEBUGScreenShot, 0);  
+	save_bitmap(buf, DEBUGScreenShot, 0);
+	sprintf(buf, "%s/debug_%s.bmp", optResultsDir, screenShotList[screenShotID]);
+	save_bitmap(buf, DEBUGScreenShot2, 0);
 	timeAfter = time(0);
 
 	printf("    " POPRECOG_SUMMARY, totalNumberOfRecognizedImages, timeAfter - timeBefore);
@@ -760,7 +805,7 @@ int main(int argc, char* argv[]) {
 	sortListOfScreenShots();
 	
 	timeBefore = time(0);
-		
+	
 	for (i = 0; i < screenShotsNumber; i++)  
 		recognizeScreenShot(i);