This shows you the differences between two versions of the page.
c:graphics.h:getimage [2015/05/06 23:06] |
c:graphics.h:getimage [2024/02/16 01:05] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ===== getimage ===== | ||
+ | |||
+ | |||
+ | ====Syntax of getimage ==== | ||
+ | <code c> | ||
+ | #include <graphics.h> | ||
+ | void getimage(int left, int top, int right, int bottom, void *bitmap); | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ==== Description of getimage ==== | ||
+ | <code c> | ||
+ | getimage copies an image from the screen to memory. | ||
+ | left, top, right, and bottom define the screen area to which the | ||
+ | rectangle is copied. bitmap points to the area in memory where the bit | ||
+ | image is stored. The first two words of this area are used for the width | ||
+ | and height of the rectangle; the remainder holds the image itself. | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ==== Example of getimage ==== | ||
+ | <code c> | ||
+ | /* getimage example */ | ||
+ | |||
+ | #include <graphics.h> | ||
+ | #include <stdlib.h> | ||
+ | #include <stdio.h> | ||
+ | #include <conio.h> | ||
+ | #include <alloc.h> | ||
+ | |||
+ | void save_screen(void *buf[4]); | ||
+ | void restore_screen(void *buf[4]); | ||
+ | |||
+ | int maxx, maxy; | ||
+ | int main(void) | ||
+ | { | ||
+ | int gdriver=DETECT, gmode, errorcode; | ||
+ | void *ptr[4]; | ||
+ | |||
+ | /* autodetect the graphics driver and mode */ | ||
+ | initgraph(&gdriver, &gmode, ""); | ||
+ | errorcode = graphresult(); /* check for any errors */ | ||
+ | if (errorcode != grOk) { | ||
+ | printf("Graphics error: %s\n", grapherrormsg(errorcode)); | ||
+ | |||
+ | printf("Press any key to halt:"); | ||
+ | getch(); | ||
+ | exit(1); | ||
+ | } | ||
+ | |||
+ | maxx = getmaxx(); | ||
+ | maxy = getmaxy(); | ||
+ | |||
+ | /* draw an image on the screen */ | ||
+ | rectangle(0, 0, maxx, maxy); | ||
+ | line(0, 0, maxx, maxy); | ||
+ | line(0, maxy, maxx, 0); | ||
+ | save_screen(ptr); /* save the current screen */ | ||
+ | getch(); /* pause screen */ | ||
+ | cleardevice(); /* clear screen */ | ||
+ | restore_screen(ptr); /* restore the screen */ | ||
+ | getch(); /* pause screen */ | ||
+ | |||
+ | closegraph(); | ||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | void save_screen(void *buf[4]) | ||
+ | { | ||
+ | unsigned size; | ||
+ | int ystart=0, yend, yincr, block; | ||
+ | yincr = (maxy+1) / 4; | ||
+ | yend = yincr; | ||
+ | |||
+ | /* get byte size of image */ | ||
+ | size = imagesize(0, ystart, maxx, yend); | ||
+ | for (block=0; block<=3; block++) { | ||
+ | if ((buf[block] = farmalloc(size)) == NULL) { | ||
+ | closegraph(); | ||
+ | printf("Error: not enough heap space in save_screen().\n"); | ||
+ | exit(1); | ||
+ | } | ||
+ | getimage(0, ystart, maxx, yend, buf[block]); | ||
+ | |||
+ | ystart = yend + 1; | ||
+ | yend += yincr + 1; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void restore_screen(void *buf[4]) | ||
+ | { | ||
+ | int ystart=0, yend, yincr, block; | ||
+ | yincr = (maxy+1) / 4; | ||
+ | yend = yincr; | ||
+ | for (block=0; block<=3; block++) { | ||
+ | putimage(0, ystart, buf[block], COPY_PUT); | ||
+ | farfree(buf[block]); | ||
+ | ystart = yend + 1; | ||
+ | |||
+ | yend += yincr + 1; | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ==== See also ==== | ||
+ | [[getpixel]] | ||
+ | [[imagesize]] | ||
+ | [[putimage]] | ||
+ | |||
+ | |||
+ | ===== output of getimage example ===== | ||
+ | |||
+ | no output of example at the moment | ||
+ | do not hesitate and add it... | ||
+ | |||
+ | |||