PPM是一个Linux下的简单图像格式,可以用Xnview打开。Agg的教程第一个,就是生成PPM格式的图像。PPM格式定义参见:http://en.wikipedia.org/wiki/Netpbm_format。以下是一个简单的画点程序:
buffer.cpp
#include <stdio.h> #include <string.h> #include "agg_rendering_buffer.h" const int HEIGHT = 480; const int WIDTH = 640; /* PPM(Portable PixMap) * Portable BitMap [1] P1 ASCII P4 binary .pbm 0–1 (black & white) * Portable GrayMap [2] P2 ASCII P5 binary .pgm 0–255 (gray scale) * Portable PixMap [3] P3 ASCII P6 binary .ppm 0–255 (RGB) * * Row 0:R G B R G B ... * Row 1:R G B R G B ... * ... */ bool writePpm(const unsigned char* buffer, unsigned width, unsigned height, const char* fileName) { FILE* fd = fopen(fileName, "wb"); if(fd) { fprintf(fd, "P6 %d %d 255 ", width, height); fwrite(buffer, 1, width * height * 3, fd); fclose(fd); return true; } return false; } bool setPixel(agg::rendering_buffer& rbuf, int x, int y, unsigned char r, unsigned char g, unsigned char b) { unsigned char* ptr = rbuf.row_ptr(y) + x * 3; *ptr++ = r; *ptr++ = g; *ptr++ = b; return true; } int main(int argc, char* argv[]) { unsigned char* buffer = new unsigned char[WIDTH * HEIGHT * 3]; memset(buffer, 255, WIDTH * HEIGHT * 3); agg::rendering_buffer rbuf(buffer, WIDTH, HEIGHT, WIDTH * 3); for(int i = 0; i < WIDTH; i ++) { setPixel(rbuf, i, 10, 255, 0, 0); } for(int i = 0; i < HEIGHT; i ++) { setPixel(rbuf, 120, i, 0, 255, 0); } writePpm(buffer, WIDTH, HEIGHT, "agg_test.ppm"); delete [] buffer; return 0; }
Makefile:
OBJS = buffer.cpp #agg_win32_bmp.cpp agg_platform_support.cpp CC = g++ COMPILER_FLAGS = -w -m32 LINKER_FLAGS = -lagg -lgdi32 HEADERS = -I./agg/include LIBS = -L./agg/lib OBJ_NAME = agg.exe all :$(OBJS) $(CC) $(OBJS) $(COMPILER_FLAGS) $(HEADERS) $(LIBS) $(LINKER_FLAGS) -o $(OBJ_NAME) clean: rm -f *.o *.exe
画出来很简单: