Gdiplus的Graphics在DrawImage的时候,怎么指定透明度?

会录 2014-01-18 10:18:08
注意:我不是在做窗口半透明的效果。

我只是想把几幅不透明的Gdiplus::Bitmap做叠加,其中有些在叠加的时候,想给予一定的透明度。

具体叠加代码如下:




Gdiplus::Bitmap bitmap(500, 500, PixelFormat32bppARGB);
Gdiplus::Graphics graphics(&bitmap);


graphics.DrawImage(&bitmap1, 0, 0);
graphics.DrawImage(&bitmap2, 0, 0);
graphics.DrawImage(&bitmap3, 0, 0);


...全文
881 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
会录 2014-01-18
  • 打赏
  • 举报
回复
那个矩阵变换的原理,你理解么?能不能解释下?
引用 3 楼 xiaoc1026 的回复:
引用 2 楼 u013486147 的回复:
难道要自己修改图片矩阵数据中的Alpha值? 有其他方法吗? [quote=引用 1 楼 xiaoc1026 的回复:] graphics.DrawImage 没有这种功能
不好意思,好像 Status DrawImage( Image *image, const Rect &destRect, INT srcx, INT srcy, INT srcwidth, INT srcheight, Unit srcUnit, ImageAttributes *imageAttributes, DrawImageAbort callback, VOID *callbackData ); 这个函数可以实现

/// 设置图片的透明度  
       /// </summary>  
       /// <param name="image">原图</param>  
       /// <param name="alpha">透明度0-255</param>  
       /// <returns></returns>  
       private Bitmap SetPictureAlpha(Image image,int alpha)  
       {  
           //颜色矩阵  
           float[][] matrixItems =  
           {  
               new float[]{1,0,0,0,0},  
               new float[]{0,1,0,0,0},  
               new float[]{0,0,1,0,0},  
               new float[]{0,0,0,alpha/255f,0},  
               new float[]{0,0,0,0,1}  
           };  
           ColorMatrix colorMatrix = new ColorMatrix(matrixItems);  
           ImageAttributes imageAtt = new ImageAttributes();  
           imageAtt.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);  
           Bitmap bmp = new Bitmap(image.Width, image.Height);  
           Graphics g = Graphics.FromImage(bmp);  
           g.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height),  
                   0, 0, image.Width, image.Height, GraphicsUnit.Pixel, imageAtt);  
           g.Dispose();  
  
           return bmp;  
       }  
[/quote]
见习学术士 2014-01-18
  • 打赏
  • 举报
回复
引用 2 楼 u013486147 的回复:
难道要自己修改图片矩阵数据中的Alpha值? 有其他方法吗?
引用 1 楼 xiaoc1026 的回复:
graphics.DrawImage 没有这种功能
不好意思,好像 Status DrawImage( Image *image, const Rect &destRect, INT srcx, INT srcy, INT srcwidth, INT srcheight, Unit srcUnit, ImageAttributes *imageAttributes, DrawImageAbort callback, VOID *callbackData ); 这个函数可以实现

/// 设置图片的透明度  
       /// </summary>  
       /// <param name="image">原图</param>  
       /// <param name="alpha">透明度0-255</param>  
       /// <returns></returns>  
       private Bitmap SetPictureAlpha(Image image,int alpha)  
       {  
           //颜色矩阵  
           float[][] matrixItems =  
           {  
               new float[]{1,0,0,0,0},  
               new float[]{0,1,0,0,0},  
               new float[]{0,0,1,0,0},  
               new float[]{0,0,0,alpha/255f,0},  
               new float[]{0,0,0,0,1}  
           };  
           ColorMatrix colorMatrix = new ColorMatrix(matrixItems);  
           ImageAttributes imageAtt = new ImageAttributes();  
           imageAtt.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);  
           Bitmap bmp = new Bitmap(image.Width, image.Height);  
           Graphics g = Graphics.FromImage(bmp);  
           g.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height),  
                   0, 0, image.Width, image.Height, GraphicsUnit.Pixel, imageAtt);  
           g.Dispose();  
  
           return bmp;  
       }  
会录 2014-01-18
  • 打赏
  • 举报
回复
难道要自己修改图片矩阵数据中的Alpha值? 有其他方法吗?
引用 1 楼 xiaoc1026 的回复:
graphics.DrawImage 没有这种功能
见习学术士 2014-01-18
  • 打赏
  • 举报
回复
graphics.DrawImage 没有这种功能
代码下载地址: https://pan.quark.cn/s/35e46f7e83fb 关于 Build Status Lines of code 这是一个参考 PotPlayer 的界面使用 Java 以及图形界面框架 JavaFX 使用 MCV 图形界面与业务逻辑分离的开发模式, 所开发的个人视频播放器项目, 开发这个项目旨在于学习图形界面框架 JavaFX 实现了具有和 PotPlayer相同 的简洁界面和流畅的操作逻辑。 Note: PotPlayer 是 KMPlayer 的原制作者姜龙喜先生(韩国)进入 Daum 公司后的 新一代网络播放器, PotPlayer的优势在于强大的内置解码器以及支持各类的 视频格式, 而且是免费下载提供使用的。 目前版本: 2020/10/28 v1.0.0 [x] 支持打开文件自动播放 [x] 支持查看播放记录 [x] 支持屏幕边沿窗口自动吸附 [x] 支持双击视频来播放和暂停 [x] 支持左键点击窗口任意位置来拖到窗口 [x] 支持左键双击播放窗口打开文件 [x] 支持根据视频尺寸自动调整窗口大小 [x] 支持根据播放文件类型调整窗口模式 [x] 支持根据视频尺寸自动调整窗口显示位置防止超出屏幕 [x] 支持记录上一次访问的文件路径 [x] 支持播放记录文件读写 已实现样式 未播放效果: 播放效果: 运行环境 本项目使用 NetBeans 配合 JDK 开发, NetBeans8.0 以及 JDK8.0 以上版本的均可以运行。 亦可使用其他集成开发环境, 例如 Eclipse, IntelliJ IDEA 配合使用 JDK8.0 以上版本均可构建此项目。 NetBeans download Eclipse downlo...

15,977

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧