Skip to content
Snippets Groups Projects
Select Git revision
  • 7ed2b963af2e5197e0fa2a896c6a32f859eec155
  • master default protected
2 results

numbapip.py

Blame
  • png_writer.cpp 3.59 KiB
    #include "png_writer.h"
    #include <stdlib.h>
    #include <stdio.h>
    #include <cstring>
    
    #include <iostream>
    
    //..................................................................................................
    PngWriter::PngWriter(): width_(0), height_(0), row_pointers_(nullptr) {}
    
    //..................................................................................................
    PngWriter::~PngWriter() {
        if (row_pointers_ != nullptr) {
            free();
        }
    }
    
    //..................................................................................................
    void PngWriter::free() {
        for (int32_t y = 0; y < height_; y++) {
            std::free(row_pointers_[y]);
        }
        std::free(row_pointers_);
        width_ = 0;
        height_ = 0;
    }
    
    //..................................................................................................
    void PngWriter::allocate(int32_t width, int32_t height) {
        if (row_pointers_ != nullptr) {
            free();
        }
        width_ = width;
        height_ = height;
        row_pointers_ = (png_bytep*)malloc(sizeof(png_bytep) * height_);
        for (int y = 0; y < height_; y++) {
            row_pointers_[y] = (png_bytep)malloc(row_size());
        }
    }
    
    //..................................................................................................
    void PngWriter::set_pixel(int32_t x, int32_t y, uint8_t value) {
        png_bytep row = row_pointers_[y];
        png_bytep px = &(row[x * 3]);
        px[0] = value;
        px[1] = value;
        px[2] = value;
    }
    
    //..................................................................................................
    void PngWriter::set_all_pixels(uint8_t value) {
        for (int y = 0; y < height_; y++) {
            png_bytep row = row_pointers_[y];
            for (int x = 0; x < width_; x++) {
                png_bytep px = &(row[x * 3]);
                px[0] = value;
                px[1] = value;
                px[2] = value;
            }
        }
    }
    
    //..................................................................................................
    void PngWriter::set_all_pixels_black() {
        for (int y = 0; y < height_; y++) {
            std::memset(row_pointers_[y], 0, row_size());
        }
    }
    
    //..................................................................................................