热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GDI+中的Bitmap转换为HBITMAP问题

GDI+中的Bitmap类是不是通过GetHBITMAP()函数转换为HBITMAP的?我这个Bitmap对象底色是透明的,然后用bmp.GetHBITMAP(Color(0,255,255,
GDI+中的Bitmap类是不是通过GetHBITMAP()函数转换为HBITMAP的?
我这个Bitmap对象底色是透明的,然后用bmp.GetHBITMAP(Color(0, 255, 255, 255), &hbmp)得到HBITMAP句柄。但是显示时底色却是蓝色的,不知道为什么?
请指教

2 个解决方案

#1


是用GetHBITMAP获得HBITMAP句柄。
但是,“我这个Bitmap对象底色是透明的”这个不好理解。32位的位图有alpha通道,能够指明每个像素的alpha值,但是这也需要程序进行处理(比如,用AlphaBlend绘制)才能起到透明/半透明的效果。不对alpha通道进行处理直接绘制的话,他还是按这个像素的RGB值显示的

#2


不好意思我没说清楚,语句如下
//下面是创建背景透明的位图
using namespace Gdiplus;
m_pBmp = new Bitmap(rect.right - rect.left, rect.bottom - rect.top, PixelFormat32bppARGB);
Graphics* gBmp = Graphics::FromImage(m_pBmp);
SolidBrush sb(Color(0, 255, 255, 255));
gBmp->FillRectangle(&sb, Rect(0, 0, rect.right, rect.bottom));
Pen p(Color(255, 255, 0, 0), 1);
gBmp->DrawEllipse(&p, 0, 0, rect.right, rect.bottom);
//Create a string.
WCHAR string[] = L"尚未签章";
// Initialize arguments.
Gdiplus::Font myFont(L"Arial", 16);
PointF origin(0.0f, 0.0f);
SolidBrush blackBrush(Color(255, 0, 0, 0));
// Draw string.
gBmp->DrawString(string, -1, &myFont, origin, &blackBrush);

然后我在OnDraw()函数中用如下语句
HBITMAP hbmp;
m_pBmp->GetHBITMAP(Gdiplus::Color(0, 255, 255, 255), &hbmp);
CDC MemDC;
MemDC.CreateCompatibleDC(NULL);
HBITMAP hOldBmp = (HBITMAP)::SelectObject(MemDC.GetSafeHdc(), hbmp);
pdc->StretchBlt(0, 0, rcBounds.right, rcBounds.bottom, 
     &MemDC, 0, 0, rcBounds.right, rcBounds.bottom, SRCCOPY);
::SelectObject(MemDC.GetSafeHdc(), hOldBmp);
MemDC.DeleteDC();

推荐阅读
  • Android中Bitmap与Drawable的区别有哪些?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更 ... [详细]
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 网上有很多解决android加载bitmap内存溢出的方法,搜了一圈做下整理总结。项目里需求是拍摄多图之后上传,部分手机会内存溢出。常用一种解决方法:即将载入的图片缩小,这种方式以牺牲图片的质量为代价 ... [详细]
  • BitMap的原理和实现方法
    这篇文章主要介绍“BitMap的原理和实现方法”,在日常操作中,相信很多人在BitMap的原理和实现方法问题上存在疑惑,小编查阅了各式资料,整理出简 ... [详细]
  • 从具有确切位置的两个imageView创建位图 - Create bitmap from two imageView with exact location
    MyTarget:Getonephotofromcameraorgallery,thensetittoimageViewA从相机或图库中获取一张照片,然后将其设置 ... [详细]
  • 在Android中进行图像处理的任务时,有时我们希望将处理后的结果以图像文件的格式保存在内部存储空间中,本文以此为目的,介绍将Bitmap对象的数据以P ... [详细]
  • Iamtryingtodevelopanapponcanvas,Iamdrawingabitmaponthecanvas.Afterdrawing,iamtryin ... [详细]
  • MPLS VP恩 后门链路shamlink实验及配置步骤
    本文介绍了MPLS VP恩 后门链路shamlink的实验步骤及配置过程,包括拓扑、CE1、PE1、P1、P2、PE2和CE2的配置。详细讲解了shamlink实验的目的和操作步骤,帮助读者理解和实践该技术。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
author-avatar
059586768803wsq
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有