int main(int argc, const char **argv) { int res = CGRESULT_UNSPECIFIED; int w = 850; int h = 850; int size = w*h; int w1, h1; double *r1 = new double[size]; double *g1 = new double[size]; double *b1 = new double[size]; int w2, h2; double *r2 = new double[size]; double *g2 = new double[size]; double *b2 = new double[size]; int w3, h3; double *r3 = new double[size]; double *g3 = new double[size]; double *b3 = new double[size]; graphics_readImageRGB(argv[1], "bmp", &w, &h, &w1, &h1, r1, g1, b1, 0, &res); if (res != CGRESULT_OK) goto finish; graphics_readImageRGB(argv[2], "bmp", &w, &h, &w2, &h2, r2, g2, b2, 0, &res); if (res != CGRESULT_OK) goto finish; if (w1 != w2 || h1 != h2) { res = CGRESULT_UNSPECIFIED + CGRESULT_BAD_DIMENSION; goto finish; } res = imageDiff(size, r1, g1, b1, r2, g2, b2, r3, g3, b3); if (res != CGRESULT_OK) goto finish; graphics_writeImageRGB(argv[3], "bmp", &w1, &h1, r3, g3, b3, 0, &res); finish: delete[] r1; delete[] g1; delete[] b1; delete[] r2; delete[] g2; delete[] b2; delete[] r3; delete[] g3; delete[] b3; std::cout << "result=" << res << std::endl; return res; }
int main(int argc, char **argv) { gdImagePtr A, B, C; unsigned char black, white; unsigned int minSX, minSY, maxSX, maxSY; bool rc; #ifdef HAVE_GD_PNG FILE *f; #endif if (argc < 3) { fprintf(stderr, "Usage: diffimg image1 image2 [outimage]\n"); exit(EX_USAGE); } A = imageLoad(argv[1]); B = imageLoad(argv[2]); minSX = (gdImageSX(A) < gdImageSX(B)) ? gdImageSX(A) : gdImageSX(B); minSY = (gdImageSY(A) < gdImageSY(B)) ? gdImageSY(A) : gdImageSY(B); maxSX = (gdImageSX(A) > gdImageSX(B)) ? gdImageSX(A) : gdImageSX(B); maxSY = (gdImageSY(A) > gdImageSY(B)) ? gdImageSY(A) : gdImageSY(B); C = gdImageCreatePalette (maxSX, maxSY); white = gdImageColorAllocate(C, gdRedMax, gdGreenMax, gdBlueMax); black = gdImageColorAllocate(C, 0, 0, 0); if (maxSX > minSX && maxSY > minSY) gdImageFilledRectangle(C, minSX, minSY, maxSX-1, maxSY-1, black); rc = imageDiff (A, B, C, minSX, minSY, black, white); #ifdef HAVE_GD_PNG if ((argc > 3) && ((f = fopen(argv[3], "wb")))) { gdImagePng (C, f); fclose(f); } else gdImagePng (C, stdout); #else fprintf(stderr, "PNG output support is not available\n"); #endif gdImageDestroy(A); gdImageDestroy(B); gdImageDestroy(C); return (rc ? EXIT_FAILURE : EXIT_SUCCESS); }