十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
说明
成都创新互联主营承德县网站建设的网络公司,主营网站建设方案,成都app开发,承德县h5微信小程序搭建,承德县网站营销推广欢迎承德县等地区企业咨询显示一张图片,非常容易
例子
wxImage p_w_picpath(wxT("C:/timg.bmp"), wxBITMAP_TYPE_BMP);
wxBitmap bitmap(p_w_picpath);
wxBufferedPaintDC dc(this);
dc.DrawBitmap(bitmap, 0, 0, true);
问题
尝试调用Create函数指定图片的原始数据,当前使用bmp位图为例子,bmp的偏移54个字节之后是调色板,但是当前使用24色
位图,所以没有调色板,后面直接是图片数据,生辰位图出错,记录如下:
FILE * fileFd;
long fileLen;
fileFd = fopen ("C:/timg.bmp","rb");
if (fileFd==NULL)
{
return ;
}
else
{
fseek (fileFd, 0, SEEK_END);
fileLen=ftell (fileFd);
}
char* pRawData = (char*)malloc(fileLen-54);
fseek (fileFd, 54, SEEK_SET);
fputs(pRawData, fileFd);
fclose(fileFd);
wxBitmap bitmap;
bitmap.Create(pRawData, wxBITMAP_TYPE_BMP, 1024, 626);
wxBufferedPaintDC dc(this);
dc.DrawBitmap(bitmap, 0, 0, true);
说明
使用AGG渲染,存在一块渲染缓存区域,实际上就是一块内存区域保存每一个像素的RGBA数据。在已有的章节中,可以使用Win32 API,但是从整一个过程可以看到,过程比较繁琐,并且会导致已有的wxClientDC等不能使用DrawText函数的问题。如果wxBitmap能够绑定一块渲染缓存,或许能够完美的解决该问题
测试结果
实际上,调用wxBitmap的Create函数返回值永远是false,并且跟踪源代码bitmap.cpp发现,通过调用基类wxBitmapHandler的派生类Create函数来实现,但是派生类的的具体实现只有一句话:return false; 说明实现的并不完整,因此下面的测试代码不能实现基本功能
测试代码
char* pData = (char*)malloc(width*height*4);
memset(pData, 0xff, width*height*4);
wxBitmap bitmap;
bool ret = bitmap.Create(pData, wxBITMAP_TYPE_BMP_RESOURCE, width, height, 1);//wxBITMAP_TYPE_BMP
m_rbuf.attach((unsigned char*)pData, width, height, -width*4); // Use negative stride in order
m_pixf.attach(m_rbuf);
m_renb.attach(m_pixf);
m_ren.attach(m_renb);
m_renb.clear(agg::rgba8(0, 0, 0, 255));
m_ras.move_to_d(100, 34.15);
m_ras.line_to_d(398.23, 123.43);
m_ras.line_to_d(165.45, 401.87);
// Setting the attrribute (color) & Rendering
m_ren.color(agg::rgba8(80, 90, 60));
agg::render_scanlines(m_ras, m_sl, m_ren);
wxMemoryDC memDC;
memDC.SelectObject(bitmap);
memDC.SetPen(*wxRED_PEN);
memDC.DrawRectangle((wxRect(10, 10, 100, 100)));
wxBufferedPaintDC destDC(this);
destDC.SetBackground(*wxWHITE_BRUSH);
destDC.Clear();
destDC.Blit(0, 0,
bitmap.GetWidth(), bitmap.GetHeight(),
&memDC,
0, 0,
wxCOPY,
true);
memDC.SelectObject(wxNullBitmap);
return;
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。