首页 > 代码库 > Agg:PPM格式图像生成
Agg:PPM格式图像生成
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.cppCC = g++COMPILER_FLAGS = -w -m32LINKER_FLAGS = -lagg -lgdi32HEADERS = -I./agg/includeLIBS = -L./agg/lib OBJ_NAME = agg.exeall :$(OBJS) $(CC) $(OBJS) $(COMPILER_FLAGS) $(HEADERS) $(LIBS) $(LINKER_FLAGS) -o $(OBJ_NAME)clean: rm -f *.o *.exe
画出来很简单:
Agg:PPM格式图像生成
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。