Annotation of nono/lib/bitmap.h, revision 1.1

1.1     ! root        1: //
        !             2: // nono
        !             3: // Copyright (C) 2021 nono project
        !             4: // Licensed under nono-license.txt
        !             5: //
        !             6: 
        !             7: //
        !             8: // ビットマップ
        !             9: //
        !            10: 
        !            11: #pragma once
        !            12: 
        !            13: #include "header.h"
        !            14: #include "color.h"
        !            15: #include "rect.h"
        !            16: 
        !            17: // ビットマップ (基本クラス)
        !            18: class BitmapBase
        !            19: {
        !            20:  protected:
        !            21:        BitmapBase();
        !            22:        BitmapBase(int width_, int height_, int depth_);
        !            23: 
        !            24:        void Create(int width_, int height_, int depth_);
        !            25:  public:
        !            26:        virtual ~BitmapBase();
        !            27: 
        !            28:        int GetWidth() const { return width; }
        !            29:        int GetHeight() const { return height; }
        !            30:        int GetStride() const { return stride; }
        !            31: 
        !            32:        uint8 *GetBuf() { return buf; }
        !            33:        const uint8 *GetBuf() const { return buf; }
        !            34: 
        !            35:  protected:
        !            36:        int width {};
        !            37:        int height {};
        !            38:        int stride {};
        !            39: 
        !            40:        uint8 *buf {};
        !            41:        std::unique_ptr<uint8[]> owned_buf {};
        !            42: };
        !            43: 
        !            44: // 1bpp ビットマップ
        !            45: class BitmapI1 : public BitmapBase
        !            46: {
        !            47:        using inherited = BitmapBase;
        !            48:  public:
        !            49:        BitmapI1();
        !            50:        BitmapI1(int width_, int height_);
        !            51:        BitmapI1(const void *buf_, int width_, int height_);
        !            52:        ~BitmapI1() override;
        !            53: 
        !            54:        void Create(int width_, int height_);
        !            55: 
        !            56:        // カラーコード cc で全体を塗りつぶす
        !            57:        void Fill(int cc);
        !            58: };
        !            59: 
        !            60: // 8bpp ビットマップ
        !            61: class BitmapI8 : public BitmapBase
        !            62: {
        !            63:        using inherited = BitmapBase;
        !            64:  public:
        !            65:        BitmapI8();
        !            66:        BitmapI8(int width_, int height_);
        !            67:        BitmapI8(const void *buf_, int width_, int height_);
        !            68:        ~BitmapI8() override;
        !            69: 
        !            70:        void Create(int width_, int height_);
        !            71: 
        !            72:        // カラーコード cc で全体を塗りつぶす
        !            73:        void Fill(int cc);
        !            74: 
        !            75:        uint8 *GetRowPtr(int y) const {
        !            76:                assert(y < height);
        !            77:                return &buf[y * stride];
        !            78:        }
        !            79:        uint8 *GetPtr(int x, int y) const {
        !            80:                assert(x < width);
        !            81:                assert(y < height);
        !            82:                return &buf[y * stride + x]; }
        !            83:        };
        !            84: 
        !            85: // 24bpp ビットマップ
        !            86: class BitmapRGB : public BitmapBase
        !            87: {
        !            88:        using inherited = BitmapBase;
        !            89:  public:
        !            90:        BitmapRGB();
        !            91:        BitmapRGB(int width_, int height_);
        !            92:        BitmapRGB(const void *buf_, int width_, int height_);
        !            93:        ~BitmapRGB() override;
        !            94: 
        !            95:        void Create(int width_, int height_);
        !            96: 
        !            97:        // 色 c で全体を塗りつぶす
        !            98:        void Fill(Color c);
        !            99: 
        !           100:        void DrawLine(Color c, int x1, int y1, int x2, int y2);
        !           101:        void DrawLineH(Color c, int x1, int y1, int x2);
        !           102:        void DrawLineV(Color c, int x1, int y1, int y2);
        !           103: 
        !           104:        void FillRect(Color c, const Rect& rect);
        !           105:        void FillRect(Color c, int dx, int dy, int dw, int dh);
        !           106: 
        !           107:        void DrawRect(Color c, const Rect& rect);
        !           108:        void DrawRect(Color c, int dx, int dy, int dw, int dh);
        !           109: 
        !           110:        void DrawBitmap(int dx, int dy, const BitmapI1& src, const Color *palette);
        !           111:        void DrawBitmap(int dx, int dy, const BitmapI8& src, const Color *palette,
        !           112:                const Rect& sr);
        !           113:        void DrawBitmap(int dx, int dy, const BitmapRGB& src);
        !           114:        void DrawScaleUp(int dx, int dy, int scale, const BitmapI1& src,
        !           115:                const Color *palette);
        !           116: 
        !           117:        void StretchDraw(Rect dr, const BitmapRGB& src);
        !           118: 
        !           119:        uint8 *GetRowPtr(int y) const {
        !           120:                assert(y < height);
        !           121:                return &buf[y * stride];
        !           122:        }
        !           123:        uint8 *GetPtr(int x, int y) const {
        !           124:                assert(x < width);
        !           125:                assert(y < height);
        !           126:                return &buf[y * stride + x * 3];
        !           127:        }
        !           128: 
        !           129:  private:
        !           130:        Color Mean(const RectD& sr) const;
        !           131: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.