From 4b442b7e3f3add71c07b5351affb2cf785f75ff0 Mon Sep 17 00:00:00 2001 From: lmaresz <lmaresz@sch.bme.hu> Date: Tue, 12 Feb 2019 08:44:38 +0100 Subject: [PATCH] =?UTF-8?q?Pixel=20=C3=A9s=20Frame=20oszt=C3=A1lyok=20hozz?= =?UTF-8?q?=C3=A1adva?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spi_test.cpp | 97 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 73 insertions(+), 24 deletions(-) diff --git a/spi_test.cpp b/spi_test.cpp index a77c8e0..44d4146 100644 --- a/spi_test.cpp +++ b/spi_test.cpp @@ -2,39 +2,88 @@ #include <iostream> #include <unistd.h> #include <cstring> - -using namespace std; - -const uint8_t WIDTH = 40; -const uint8_t HEIGHT = 13; +#include <vector> class Pixel { - public: - Pixel(uint8_t r = 0, uint8_t g = 0, uint8_t b = 0) : r(r), g(g), b(b) {} - private: - uint8_t r; - uint8_t g; - uint8_t b; +public: + Pixel(uint8_t red = 0, uint8_t green = 0, uint8_t blue = 0); + uint8_t operator[](unsigned index); +private: + uint8_t m_red; + uint8_t m_green; + uint8_t m_blue; }; class Frame { - private: - uint16_t duration; - Pixel data[HEIGHT][WIDTH]; - public: - Frame(Pixel data[HEIGHT][WIDTH], uint16_t duration) {}// : data(data), duration(duration) {} - uint8_t* to_spi_data(); +public: + Frame(unsigned height = 64, unsigned width = 13); + ~Frame(); + std::vector<uint16_t> get_raw_data(); + void transform(); +private: + unsigned m_height; + unsigned m_width; + Pixel** m_data; + std::vector<uint16_t> m_raw_data; }; -uint8_t* to_spi_data() { - uint8_t* spi_data = new uint8_t[24*WIDTH*2]; - for (int x = 0; x < WIDTH; x++) { - for (int y = 0; y < HEIGHT; y++) { - 0; - } - } +Frame::Frame(unsigned height, unsigned width) : m_height(height), m_width(width) +{ + m_data = new Pixel*[height]; + for (int i = 0; i < height; i++) { + m_data[i] = new Pixel[width]; + } +} + +Frame::~Frame() +{ + for (int i = 0; i < m_height; i++) { + delete[] m_data[i]; + } + delete[] m_data; +} + +std::vector<uint16_t> Frame::get_raw_data() +{ + return m_raw_data; } +void Frame::transform() +{ + for (int x = 0; x < m_width; x++) { + for (int i = 0; i < 24; i++) { + uint16_t temp_data; + for (int y = 0; y < m_height; y++) { + temp_data += m_data[y][x][i] >> y; + } + m_raw_data.push_back(temp_data); + temp_data = 0; + } + } +} + +Pixel::Pixel(uint8_t red, uint8_t green, uint8_t blue) : m_red(red), m_green(green), m_blue(blue) +{ +} + +uint8_t Pixel::operator[](unsigned index) +{ + if (index < 8) { + return m_red >> index; + } + else if (index < 16) { + return m_green >> (index - 8); + } + else if (index < 24) { + return m_blue >> (index - 16); + } +} + + +using namespace std; + +const uint8_t WIDTH = 40; +const uint8_t HEIGHT = 13; uint16_t dataRed[40*24] = {0}; -- GitLab