关于rederbuffer

// gdi gdi+ 使用的双缓存
class RenderBuffer
{
public:
	RenderBuffer();
	~RenderBuffer();


public:
    void   Resize(unsigned int width, unsigned int height);
    void   Clear(DWORD dwColor, RECT* prc);
	void   Destroy();
    void   Dump();
	void   GetImageData(ImageData*  pData);


public:
    GRAPHICS_RENDER_LIBRARY_TYPE  m_eGraphicsType;  // 同时支持gdi/gdi+
	HBITMAP  m_hBitmap;
    HDC      m_hDC;


    unsigned int  m_nWidth;
    unsigned int  m_nHeight;
};

这个类的实质就是封装了一下HBITMAP和GDI,对HBITMAP的数据进行操作,有点像mfc的memdc的概念。只是这里多了提取hbitmap内存数据的接口。

RenderBuffer::RenderBuffer()
{
    m_eGraphicsType= GRAPHICS_RENDER_LIBRARY_TYPE_GDI;
    m_hDC = NULL;
    m_nWidth = 0;
    m_nHeight = 0;
    m_hBitmap = NULL;
}

RenderBuffer::~RenderBuffer()
{
	Destroy();
}

void  RenderBuffer::Destroy()
{
	SAFE_DELETE_GDIOBJECT(m_hBitmap);
    DeleteDC(m_hDC);
    m_hDC = NULL;
    m_nHeight = m_nWidth = 0;
}

void  RenderBuffer::Clear(DWORD dwColor, RECT* prc)
{
    if (!m_hBitmap)
        return;

    HBRUSH hBrush = CreateSolidBrush(dwColor);
    if (prc)
    {
        ::FillRect(m_hDC, prc, hBrush);
    }
    else
    {
        RECT rc = {0, 0, m_nWidth, m_nHeight};
        ::FillRect(m_hDC, &rc, hBrush);
    }
    
    SAFE_DELETE_GDIOBJECT(hBrush);
}

void   RenderBuffer::Resize(unsigned int width, unsigned int height)
{
    if (width == 0 || height == 0)
    {
        Destroy();
        return;
    }
    if (width == m_nWidth && height == m_nHeight)
    {
        return;
    }
    if (m_hBitmap)
    {
        SAFE_DELETE_GDIOBJECT(m_hBitmap);
    }

    Image image;
	image.Create(width, -(int)height, 32, Image::createAlphaChannel);
    m_hBitmap = image.Detach();

    if (!m_hDC)
    {
        m_hDC = CreateCompatibleDC(NULL);
        SetBkMode(m_hDC, TRANSPARENT);
        SetStretchBltMode(m_hDC, HALFTONE);
    }
    HBITMAP hOldBitmap = (HBITMAP)SelectObject(m_hDC, m_hBitmap);

    m_nWidth = width;
    m_nHeight = height;
}

// void  RenderBuffer::Draw(HDC hDC)
// {
//     if (m_bAlphaBlend)
//     {
//         if (255 == m_nOpcity)
//         {
//             m_image.Draw(hDC, 0, 0);
//         }
//         else
//         {
//             m_image.Draw(hDC, 0, 0, m_nOpcity);
//         }
//     }
//     else
//     {
//         m_image.BitBlt(hDC, 0, 0);
//     }
// }

void  RenderBuffer::Dump()
{
    if (m_hBitmap)
    {
        Image image;
        image.Attach(m_hBitmap, Image::DIBOR_TOPDOWN);
        image.Save(L"C:\\aaa.bmp", Gdiplus::ImageFormatBMP);
        image.Save(L"C:\\aaa.png", Gdiplus::ImageFormatPNG);
        image.Detach();
    }
}

void  RenderBuffer::GetImageData(ImageData*  pData)
{
	BITMAP  bm;
	<span style="background-color: rgb(204, 0, 0);">::GetObject(m_hBitmap, sizeof(bm), &bm);</span>

	pData->m_nbpp = bm.bmBitsPixel;
	pData->m_nWidth = bm.bmWidth;
	pData->m_nHeight = bm.bmHeight;
	pData->m_nStride = bm.bmWidthBytes;
	pData->m_pScan0 = (BYTE*)bm.bmBits;
	pData->m_ptr = (BYTE*)bm.bmBits;
}




摘 要 在当今数字化浪潮下,传统农业向智慧农业转型成为必然趋势。为解决农业信息流通不畅、服务效率低下等问题,本研究致力于开发一款基于 Spring Boot 的农业服务小程序。 此小程序针对普通用户、商家用户、专家用户和管理员四类角色,设计了丰富且实用的功能。普通用户可轻松完成注册登录,在首页浏览农业资讯,使用购物车选购农产品,还能享受咨询服务、预约专家指导等。商家用户能够管理商城,包括商品分类、订单处理与配送、售后管理等。专家用户在后台处理咨询与预约服务,为农业生产提供专业建议。管理员则全面掌控系统,涵盖用户管理、服务管理、公告发布等工作。 开发过程中,采用 Spring Boot 框架搭建系统,其便捷的开发特性提高了开发效率;选用 MySQL 数据库存储数据,保障数据的稳定与安全;运用 Java 语言实现业务逻辑,确保系统的可扩展性。经过严格的可行性分析、系统设计、功能实现与测试,验证了系统在技术、经济、操作和社会层面的可行性。 该农业服务小程序的成功开发,有效提升了农业服务的质量与效率,促进了农产品的流通,为农业从业者提供了专业支持,有力推动了农业的信息化与现代化发展。不过,系统仍存在功能拓展、性能优化等方面的改进空间,未来将持续完善,以更好地服务农业领域。 关键词:Spring Boot;农业服务小程序;智慧农业;系统开发;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值