码迷,mamicode.com
首页 > 其他好文 > 详细

Agg:PPM格式图像生成

时间:2014-11-16 22:55:28      阅读:516      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   ar   os   sp   for   

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

画出来很简单:

bubuko.com,布布扣

 

Agg:PPM格式图像生成

标签:style   blog   http   io   color   ar   os   sp   for   

原文地址:http://www.cnblogs.com/jpeg/p/draw-ppm-image.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!