VC++ (main.cpp):
#include "stdafx.h" #include <iostream> #include "gd/gd.h" #include "gd/gdfontg.h" #include "gd/gdfontt.h" #include "gd/gdfonts.h" #include "gd/gdfontmb.h" #include "gd/gdfontl.h" #include <math.h> using namespace std; #pragma comment(lib, "lib/bgd.lib") #define DEG 3.14159/180. class ERR { private: int kind; public: ERR(int k) : kind(k){}; char* message() { switch(kind) { case 0: return "File Error!"; case 1: return "GD Error!"; case 2: return "File Write Error!"; case 3: return "File Close Error!"; } } }; void drawstar(gdImagePtr image, float origx, float origy, float r, float angle, int color) { int i = 0; float ptx[6],pty[6],pttx[6],ptty[6]; float temp1,temp2,temp3,temp4; for(i=0;i<6;i++) { ptx[i]=origx+r*sin(72.*i*DEG+angle*DEG); pty[i]=origy+r*cos(72.*i*DEG+angle*DEG); temp1=cos(54.*DEG-72.*DEG*i-angle*DEG); temp2=sin(54.*DEG-72.*DEG*i-angle*DEG); temp3=sin(18.*DEG); temp4=cos(36.*DEG); pttx[i]=origx+r*temp3*temp1/temp4; ptty[i]=origy+r*temp3*temp2/temp4; } for(i=0;i<5;i++) { gdImageLine(image, (int)ptx[i], (int)pty[i], (int)pttx[i], (int)ptty[i], color); gdImageLine(image, (int)pttx[i], (int)ptty[i], (int)ptx[i+1], (int)pty[i+1], color); } } int main(int argc, _TCHAR* argv[]) { int i = 0; FILE *out; int size; char *data; gdImagePtr im = gdImageCreate(500, 500); int white = gdImageColorAllocate(im, 255, 255, 255), //Background black = gdImageColorAllocate(im, 0, 0, 0), blue = gdImageColorAllocate(im, 0, 0, 255), cyan = gdImageColorAllocate(im, 0, 255, 255), green = gdImageColorAllocate(im, 128, 255, 0), red = gdImageColorAllocate(im, 255, 0, 0), purple = gdImageColorAllocate(im, 255, 0, 255), orange = gdImageColorAllocate(im, 255, 128, 0), yellow = gdImageColorAllocate(im, 255, 255, 0); out = fopen("image.png", "wb"); try { if (out) { for(i=0;i<72;i++) { drawstar(im, 250+5*i*sin(i*10*DEG), 250+5*i*cos(i*10*DEG), 30, 180, black); } data = (char *) gdImagePngPtr(im, &size); if (!data) { throw ERR(1); } if (fwrite(data, 1, size, out) != size) { throw ERR(2); } if (fclose(out) != 0) { throw ERR(3); } gdFree(data); } else { throw ERR(0); } } catch(ERR e) { cout << e.message() << endl; } return 0; }
說明:
簡單使用GD Library進行繪圖。
沒有留言:
張貼留言