#include void my_draw (Npic_image *np2, Npic_image *np1, double c1, double c2) { if (NpicImageIsOK_DS1 (np2, np1, __func__) != NPIC_SUCCESS) return; if (NpicSameImage (np2, np1, NPIC_TYPE | NPIC_SIZE) != NPIC_SUCCESS) { np2->gen.ok = NpicError (__func__, NPIC_ERR_INCOMPAT, ""); return; } switch (np2->type) { case NPIC_IMAGE_2L : { Npic_image_2l *p2 = NpicCastImage (np2), *p1 = NpicCastImage (np1); int x, y; for (y = 0; y < p2->ymax; y++) for (x = 0; x < p2->xmax; x++) p2->pix[y][x] = p1->pix[y][x]*c1 + c2; return; } case NPIC_IMAGE_3L : { Npic_image_3l *p2 = NpicCastImage (np2), *p1 = NpicCastImage (np1); int x, y, z; for (z = 0; z < p2->zmax; z++) for (y = 0; y < p2->ymax; y++) for (x = 0; x < p2->xmax; x++) p2->pix[z][y][x] = p1->pix[z][y][x]*c1 + c2; return; } default : np2->gen.ok = NpicError (__func__, NPIC_ERR_UNEX_NPIC, ""); } } int main () { Npic_image *np1, *np2; Npic_image_2l *p1; int x, y; /* Create a 2L image = 2D image with signed long pixels (4 bytes). height is ymax=12, width is xmax=20, external borders are ybor=0, xbor=0. */ np1 = NpicCreateImage_2l (12, 20, 0, 0); if (np1 == NULL) exit (1); /* Assign values to pixels */ p1 = NpicCastImage (np1); for (y = 0; y < p1->ymax; y++) for (x = 0; x < p1->xmax; x++) p1->pix[y][x] = (x + y) % 16; /* Create a second image with same size and type than np1 */ np2 = NpicDupImage (np1); if (np2 == NULL) exit (1); /* Compute np2 pixels values */ my_draw (np2, np1, 2, 4); /* Print image */ NpicPrintImage (np2); /* Destroy image */ NpicDestroyImage (np1); NpicDestroyImage (np2); exit(0); }