A simple yet powerful library for controlling graphical displays. Multiple display controllers are supported using inheritance.

Dependents:   mbed_rifletool Hexi_Bubble_Game Hexi_Catch-the-dot_Game Hexi_Acceleromagnetic_Synth

NOTE: This library is in beta right now. As far as I know, everything here works, but there are many features that are lacking so far. Most notably containers, button handling, and display drivers other than the SSD1306.

Decoders/BitmapImage.cpp

Committer:
neilt6
Date:
2014-05-27
Revision:
3:a8f72d4864e6
Parent:
1:f7003ec66a51

File content as of revision 3:a8f72d4864e6:

/* NeatGUI Library
 * Copyright (c) 2013 Neil Thiessen
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "BitmapImage.h"

BitmapImage::BitmapImage(const char* table) : Image(table[0] * 0xFF + table[1], table[2] * 0xFF + table[3])
{
    m_ImageTable = table;
    m_FgColor = 0xFFFFFFFF;
    m_BgColor = 0x00000000;
}

BitmapImage::BitmapImage(const char* table, unsigned int fg_color) : Image(table[0] * 0xFF + table[1], table[2] * 0xFF + table[3])
{
    m_ImageTable = table;
    m_FgColor = fg_color;
    m_BgColor = 0x00000000;
}

BitmapImage::BitmapImage(const char* table, unsigned int fg_color, unsigned int bg_color) : Image(table[0] * 0xFF + table[1], table[2] * 0xFF + table[3])
{
    m_ImageTable = table;
    m_FgColor = fg_color;
    m_BgColor = bg_color;
}

unsigned int BitmapImage::pixel(int x, int y)
{
    int addr;
    int mask;
    int bpl;

    //Range check the pixel request
    if ((x < 0) || (y < 0) || (x >= width()) || (y >= height())) return 0x000000;

    //Get the pixel address
    bpl = bytesPerLine();
    mask = 0x80 >> (x % 8);
    addr = 4 + y * bpl + (x / 8);

    //Return the appropriate color
    if (m_ImageTable[addr] & mask)
        return m_FgColor;
    else
        return m_BgColor;
}

unsigned int BitmapImage::foreground()
{
    return m_FgColor;
}

void BitmapImage::foreground(unsigned int c)
{
    m_FgColor = c;
}

unsigned int BitmapImage::background()
{
    return m_BgColor;
}

void BitmapImage::background(unsigned int c)
{
    m_BgColor = c;
}

int BitmapImage::bytesPerLine()
{
    int bpl;

    //Determine the bytes per line
    bpl = width() / 8;
    if ((width() % 8) != 0) bpl++;

    //Return the bytes per line
    return bpl;
}