1 | #include <stdio.h>
|
---|
2 | #include "gd.h"
|
---|
3 | #include "gdfontg.h"
|
---|
4 | #include "gdfonts.h"
|
---|
5 |
|
---|
6 | int main(void)
|
---|
7 | {
|
---|
8 | /* Input and output files */
|
---|
9 | FILE *in;
|
---|
10 | FILE *out;
|
---|
11 |
|
---|
12 | /* Input and output images */
|
---|
13 | gdImagePtr im_in, im_out;
|
---|
14 |
|
---|
15 | /* Brush image */
|
---|
16 | gdImagePtr brush;
|
---|
17 |
|
---|
18 | /* Color indexes */
|
---|
19 | int white;
|
---|
20 | int blue;
|
---|
21 | int red;
|
---|
22 | int green;
|
---|
23 |
|
---|
24 | /* Points for polygon */
|
---|
25 | gdPoint points[3];
|
---|
26 |
|
---|
27 | /* Create output image, 128 by 128 pixels. */
|
---|
28 | im_out = gdImageCreate(128, 128);
|
---|
29 |
|
---|
30 | /* First color allocated is background. */
|
---|
31 | white = gdImageColorAllocate(im_out, 255, 255, 255);
|
---|
32 |
|
---|
33 | /* Set transparent color. */
|
---|
34 | gdImageColorTransparent(im_out, white);
|
---|
35 |
|
---|
36 | /* Try to load demoin.gif and paste part of it into the
|
---|
37 | output image. */
|
---|
38 |
|
---|
39 | in = fopen("demoin.gif", "rb");
|
---|
40 | if (!in) {
|
---|
41 | fprintf(stderr, "Can't load source image; this demo\n");
|
---|
42 | fprintf(stderr, "is much more impressive if demoin.gif\n");
|
---|
43 | fprintf(stderr, "is available.\n");
|
---|
44 | im_in = 0;
|
---|
45 | } else {
|
---|
46 | im_in = gdImageCreateFromGif(in);
|
---|
47 | fclose(in);
|
---|
48 | /* Now copy, and magnify as we do so */
|
---|
49 | gdImageCopyResized(im_out, im_in,
|
---|
50 | 16, 16, 0, 0, 96, 96, 127, 127);
|
---|
51 | }
|
---|
52 | red = gdImageColorAllocate(im_out, 255, 0, 0);
|
---|
53 | green = gdImageColorAllocate(im_out, 0, 255, 0);
|
---|
54 | blue = gdImageColorAllocate(im_out, 0, 0, 255);
|
---|
55 | /* Rectangle */
|
---|
56 | gdImageLine(im_out, 8, 8, 120, 8, green);
|
---|
57 | gdImageLine(im_out, 120, 8, 120, 120, green);
|
---|
58 | gdImageLine(im_out, 120, 120, 8, 120, green);
|
---|
59 | gdImageLine(im_out, 8, 120, 8, 8, green);
|
---|
60 | /* Circle */
|
---|
61 | gdImageArc(im_out, 64, 64, 30, 10, 0, 360, blue);
|
---|
62 | /* Arc */
|
---|
63 | gdImageArc(im_out, 64, 64, 20, 20, 45, 135, blue);
|
---|
64 | /* Flood fill */
|
---|
65 | gdImageFill(im_out, 4, 4, blue);
|
---|
66 | /* Polygon */
|
---|
67 | points[0].x = 32;
|
---|
68 | points[0].y = 0;
|
---|
69 | points[1].x = 0;
|
---|
70 | points[1].y = 64;
|
---|
71 | points[2].x = 64;
|
---|
72 | points[2].y = 64;
|
---|
73 | gdImageFilledPolygon(im_out, points, 3, green);
|
---|
74 | /* Brush. A fairly wild example also involving a line style! */
|
---|
75 | if (im_in) {
|
---|
76 | int style[8];
|
---|
77 | brush = gdImageCreate(8, 8);
|
---|
78 | gdImageCopyResized(brush, im_in,
|
---|
79 | 0, 0, 0, 0,
|
---|
80 | gdImageSX(brush), gdImageSY(brush),
|
---|
81 | gdImageSX(im_in), gdImageSY(im_in));
|
---|
82 | gdImageSetBrush(im_out, brush);
|
---|
83 | /* With a style, so they won't overprint each other.
|
---|
84 | Normally, they would, yielding a fat-brush effect. */
|
---|
85 | style[0] = 0;
|
---|
86 | style[1] = 0;
|
---|
87 | style[2] = 0;
|
---|
88 | style[3] = 0;
|
---|
89 | style[4] = 0;
|
---|
90 | style[5] = 0;
|
---|
91 | style[6] = 0;
|
---|
92 | style[7] = 1;
|
---|
93 | gdImageSetStyle(im_out, style, 8);
|
---|
94 | /* Draw the styled, brushed line */
|
---|
95 | gdImageLine(im_out, 0, 127, 127, 0, gdStyledBrushed);
|
---|
96 | }
|
---|
97 | /* Text */
|
---|
98 | gdImageString(im_out, gdFontGiant, 16, 16, "hi", red);
|
---|
99 | gdImageStringUp(im_out, gdFontSmall, 32, 32, "hi", red);
|
---|
100 | /* Make output image interlaced (allows "fade in" in some viewers,
|
---|
101 | and in the latest web browsers) */
|
---|
102 | gdImageInterlace(im_out, 1);
|
---|
103 | out = fopen("demoout.gif", "wb");
|
---|
104 | /* Write GIF */
|
---|
105 | gdImageGif(im_out, out);
|
---|
106 | fclose(out);
|
---|
107 | gdImageDestroy(im_out);
|
---|
108 | if (im_in) {
|
---|
109 | gdImageDestroy(im_in);
|
---|
110 | }
|
---|
111 | return 0;
|
---|
112 | }
|
---|
113 |
|
---|