清水迎朝阳
多年windows下c++客户端开发,或多或少踩了很多坑,积累了一些经验
展开
-
GDI+ 绘制圆形头像
需求: 用户实际头像是长方形的,现在要绘制一个圆形的头像显示解决方法:在原图像上,添加一个圆形蒙版,圆形区域是透明的,其它是背景色。原创 2023-12-18 10:02:22 · 223 阅读 · 0 评论 -
GDI+ 绘制透明图
DrawImage 构造函数很多,详情可查资料,是文件名(需要使用Unicode 编码),其它构造函数,没有用到,详情见参考资料。是色彩校正相关内容,默认值为。这里用来创建一个圆角矩形区域。这里只介绍自己这个项目用的。如下,是生成的一个透明图。原创 2023-11-09 10:51:58 · 416 阅读 · 0 评论 -
ICON 文件构成 及 制作工具
很多ICON都是用图片转ICO 这样的工具转换的,一般是没问题。但是这样转换的格式不标准,比如在代码中处理ICON时,往往会有问题。原创 2021-06-21 13:59:25 · 947 阅读 · 0 评论 -
创建设备无关位图,并获得绘图后的 内存图像数据
目录一、创建设备无关位图 CreateDIBSection1.1 CreateDIBSection1.2 使用流程示例1.3 如何为设备无关位图 分配内存?1.3.1 系统自动分配回收设备无关位图 内存空间1.3.2 获得设备无关位图 内存空间地址1.3.3 内存空间释放时机1.3.4 有了位图内存空间后,能做什么?二、一个屏幕采集的例子一、创建设备无关位图 CreateDIBSection1.1 CreateDIBSection创建一个可以直接写的设备无关位原创 2021-03-22 17:44:27 · 307 阅读 · 0 评论 -
YUVI420 视频 裁剪 缩放 拷贝
YUV介绍https://zh.wikipedia.org/wiki/YUVYUV是一种颜色空间,基于YUV的颜色编码是流媒体的常用编码方式。Y表示流明,U、V表示色度、浓度,这种表达方式起初是为了彩色电视与黑白电视之间的信号兼容。 对于图像每一点,Y确定其亮度,UV确认其彩度。YUV编码是image/video pipeline的重要组成。比如常用的I420相对于RGB24(RGB三...原创 2019-06-06 15:42:19 · 1906 阅读 · 2 评论 -
一道初中题,获取 原图比例 与 图片控件比例 不同时的留白
一般编程系统会提供一些图片控件,用以展示图片。但很多时候,图片控件的比例与原图的比例是不同的,这样就得拉伸图片了,有几种策略。一是铺满,这时候会变形,一是外切的形式,图像等比例放大,让控件整好处在图像内部一是内接的形式,让图像整好等比例最大化处在矩形内部, 等比例宽铺满 或等比例高铺满本篇主要介绍下,最常用的内接方式:如下图所示,圆形代表图片,矩形代表控件...原创 2019-02-27 11:43:42 · 289 阅读 · 0 评论 -
图像处理---区域透明图实现
在图片上指定一个圆角矩形,将此部分区域做透明处理1)将黑色设置为透明色的方式原理: 图片区域透明使用的原理是将图片某矩形区域统一置黑色,再指定黑色为透明色,绘制到目的图片中,这样在目的图片中,矩形部分就成为了透明区域 std::shared_ptr<Gdiplus::Bitmap> src_image_;方法1:...原创 2020-05-21 11:25:50 · 1404 阅读 · 2 评论 -
图像处理总结--图像保存
一 GDI+方法1 )加载GDI+库#include <GdiPlus.h>using namespace Gdiplus;#pragma comment(lib, "Gdiplus") 初始化GdiplusStartupInput gdiplusStartupInput;GdiplusStartup(&m_GdiPlusToken, &g...原创 2020-01-09 13:55:07 · 635 阅读 · 0 评论 -
YUV转成本地BMP图像保存
思路:借助LIBYUV先将其转成ARGB,再保存成本地文件YUVToARGBYUV420ToARGB(char* src, char* dst, int width, int height) { uint8_t* src_y = (uint8_t*)src; uint8_t* src_u = src_y + width * height; uint8_t* src_...原创 2019-11-18 13:52:08 · 1483 阅读 · 0 评论 -
设置透明背景图片
背景: 有两个图片,一个是目标背景图片, 一个是带有自身背景色彩的彩色图片 先将这彩色图片绘制到目标背景图片中, 这一步通过BITBLT就可实现。 但实现后的效果是: 目标图片上,绘制上去的彩色图片带有其本身的背景。 问题就来了, 我们想将彩色图片本身的背景去掉,应该如何解决? 解决方法:原创 2012-07-27 15:34:13 · 3573 阅读 · 0 评论 -
再谈平移图像 简单却足以说明原理
方式一:第1步-----重载ONEraseBkgnd, 直接返回FALS,不要自动刷新背景,避免平移闪烁BOOL CImgView::OnEraseBkgnd(CDC* pDC){ // TODO: Add your message handler code here and/or call default return FALSE; //表示未处理背景刷新}第2步原创 2011-09-19 17:32:14 · 1555 阅读 · 1 评论 -
GDI+ 填充背景时,很多时候不起作用,GDI、GDI+配合运用
在ONDRAW中执行GDI+ 填充背景时,不起作用,不知道什么原因 Graphics graphics(pDC->GetSafeHdc()); Bitmap bmp(m_imgRec.Width(),m_imgRec.Height()); //第一步 创建与屏幕等大小的内存位图 Graphics grbmp(&bmp); SolidBrush backBrush(RGB(255,255,原创 2013-03-31 21:47:26 · 2867 阅读 · 0 评论 -
图片浏览程序初始设置
一 定义变量: CRect m_imgRec;// ONSIZE()后,记录新的客户区大小 Image *m_pImage; //原图 保存原始信息 Bitmap *m_pBmp; //内存中保存的图, 长宽与原图不同,主要在这个位图上进行绘制工作 int m_nImgH;//图高 int m_nImgW;//图宽 float m_fRate; //原图与屏幕的原创 2013-03-29 15:18:28 · 1054 阅读 · 0 评论 -
vs2005 初始化GDI+环境
第一步:建立新的GdiNew.h头文件,并将其包含在stdafx.h中#define iterator _iterator#ifdef _DEBUGnamespace Gdiplus{ namespace DllExports {#include };#ifndef _GDIPLUSBASE_H#define _GDIPLUSBASE_H class Gdip原创 2011-07-21 17:32:39 · 2583 阅读 · 0 评论 -
GDI 小知识总结
1 获得系统预定义的画刷 画笔 字体HGDIOBJ GetStockObject( int fnObject);This function retrieves a handle to one of the predefined stock pens, brushes or fonts.这个函数返回一个系统预定义的画笔画刷或者字体的句柄 It is not nec...原创 2019-11-19 09:51:04 · 204 阅读 · 0 评论 -
判断其他图片是否与给定的两个图的内容是否相同
1 读取指定图片//读取闪电符号图像//闪电符号图片 //闪电符号图片 有2个图 其中,1个是索引图 一个不是索引图//像素 50*50BOOL CReplaceFlash::ReadFlashImg(CString path, char* pFlashImg){ CImage Img; Img.Load(path); int i, j; //图像每一原创 2012-09-17 09:54:55 · 3793 阅读 · 1 评论 -
索引图像的二值化
索引图像的二值化HBITMAP MyReadPic(wchar_t* wcImageFile){ CImage Img; Img.Load(wcImageFile); //灰度字图的二值化 if(Img.IsIndexed()) { long lColorSum=0; int iMaxCTEntries=0; int iColorAve=0; int iM原创 2012-09-07 08:43:32 · 1697 阅读 · 0 评论 -
且听且读 听书软件
文字显示内核已经告一段落,现在文K可以方便的呈现多彩效果,突然又想,文字显示已经极好了,如果配上文字语音岂不更妙。因此,便开始了语音开发且读且听软件。且读且听软件与其它听说软件的区别:不仅仅听,且相应字段呈现PPT视觉特效。 第一步下载:Speech SDK5.1 http://microsoft-speech-sdk.software.informer.com/5.1原创 2014-12-14 19:42:59 · 1302 阅读 · 0 评论 -
使用CBitmapButton类创建位图按钮
在网上查了很多资料,大都语焉不详,今天自己做了个位图按钮做测试,特将网上的资料整理如下: CBitmapButton是一个MFC内置的按钮类,提供图片按钮的功能,并且支持在不同状态下显示不同图片。其使用方法比较简单,比CButton更美观,比其它的第三方Button类更简洁,因此,制作位图按钮时经常需要用到它。 方法一:1、在资源编辑的时候选中按钮原创 2010-07-22 23:18:00 · 3422 阅读 · 4 评论 -
狂吃内存 但调试时又不显示内存泄露的GDI/GDI+ 情况
作者:www.gudianxiaoshuo.com 为任性动图软件 添加字体、挂件特效后,运行时,发现运行一段时间就崩溃,经查证,是占用内存太多了,导致内存不够用。 但是在调试的时候并没有出现内存泄露的情况。 后来通过逐渐注释经过排查的代码后,发现了源头所在,是几个GDI\GDI+所导致,其中并没有我自己NEW 开辟的内存。 B原创 2015-11-22 12:17:45 · 2352 阅读 · 0 评论 -
pDC 与 GetDC() 区别
在OnDraw中分别调用pDC和GetDC() 得到的结果可能不相同 pDC 所指的是视图初始的客户区DC 比如 视图是基于CFormView类的,其上设置了工具栏资源 则这些工具栏就是依赖pDC产生的, 这样,当滚动条左右移动时,工具栏资源也原创 2011-09-05 14:15:06 · 4809 阅读 · 0 评论 -
屏幕采集 处理
场景: 采集屏幕,并将采集的屏幕数据转成YUV数据发送出去分析: 要实现这一需求,需要有这几方面参数 HBITMAP capture_bitmap_ 位图 HWND capture_hwnd_ 屏幕 char* capture_data屏幕数据 ...原创 2019-07-03 18:58:06 · 801 阅读 · 0 评论 -
YUV视频美颜处理
方式一 YUV美颜算法1)对y值进行平衡处理int temp_size = width*height;colorbalance_yuv_u8((unsigned char*)data, temp_size,(size_t)(temp_size * 2 / 100), (size_t)(temp_size * 8 / 100));///////////////////////...原创 2019-06-06 17:12:32 · 1091 阅读 · 0 评论 -
YUV数据设置颜色
https://zh.wikipedia.org/wiki/YUV#.E8.BD.89.E6.8F.9B另一种换算法Y = 0.257R + 0.504G + 0.098B + 16U = 0.148R - 0.291G + 0.439B + 128V = 0.439R - 0.368G - 0.071B + 128B = 1.164(Y - 16) + 2.018(U ...原创 2019-05-31 10:48:08 · 5421 阅读 · 0 评论 -
图像转YUV处理
使用GDI+来处理图像,初始工作1)头文件#include <GdiPlus.h>#pragma comment(lib, "GdiPlus.lib")using namespace Gdiplus;2)定义变量GdiplusStartupInput m_Gdistart; ULONG_PTR m_GdiplusToken;3)...原创 2019-02-22 18:00:17 · 1332 阅读 · 0 评论 -
界面编程-写一个滑动条
//滑动条class SliderChunk:public ButtonChunk{public: short nSliderLeft; short nSliderRight; short nSliderWidth; short nSliderHeight; short nMin; short nMax; short nPos; float fRate;//表示范围与实际长原创 2017-10-03 10:53:53 · 940 阅读 · 0 评论 -
Gdiplus::GdiplusBase::operator new 函数不接受3 个参数"问题的处理
遇到这样的问题令我极为郁闷,于是查找了一下,找到了解决方案:原来是微软的 DEBUG_NEW 和 GDI+ 不匹配造成的。方法1:注释掉:#ifdef _DEBUG#define new DEBUG_NEW#endif这就好了。方法2:?1::newBitmap(cx,cy,PixelFormat32bppRG转载 2016-12-29 10:50:51 · 1880 阅读 · 0 评论 -
GDI 总结三: CImage类使用
若对您有所启发欢迎打赏古典小说网致力于打造极致阅读体验首创卡拉OK读书方式首创,桌面大屏幕TXT阅读方式前言 CImage类是基于GDI+的,但是这里为什么要讲归于GDI? 主要是基于这样的考虑: 在GDI+环境中,我们可以直接使用GDI+ ,没多少必要再使用CImage类...原创 2011-12-21 09:16:52 · 55476 阅读 · 7 评论 -
绘制表格
表格数据结构: 表格或者有左右兄弟、或者有上下兄弟但不能同时拥有父节点的HORV 属性 保存着孩子节点的排列方式 若 HORV为1,则水平排列 孩子有左右兄弟、且父节点的第一个孩子是最右侧的表格 若 HORV 为0 则垂直排列 孩子有上下兄弟 且父节点的第一个孩子是最上边的表格表格划分算法:原创 2012-07-12 16:42:57 · 1210 阅读 · 0 评论 -
MFC 对话框中设置GDI+环境
1 建立GdiPlusNew.h 代替 Gdiplus.h 以解决NEW 问题//// Ensure that GdiPlus header files work properly with MFC DEBUG_NEW and STL header files. #define iterator _iterator #ifdef _DEBUG namespace原创 2012-07-02 12:46:58 · 1456 阅读 · 0 评论 -
error C2660: 'new' : function does not take 3 parameters
GDI+ NEW 一个image类时 出现如上错误信息 Image* pImage=new Image(path); 我的解决方法:直接使用Image类的成员函数FromFile FromFile的声明如下: public:static Image^ FromFile( String^ filename); 由此可原创 2009-10-28 14:55:00 · 8855 阅读 · 1 评论 -
GDI+的一些问题
DrawImage(m_pBmp,destRC,0,0,source_w,source_h,UnitPixel); 原图很大13M,我本意是用这个语句只将原图中位于视图中的部分画到m_pBmp中,但是经过多次试验发现: 当destRC.width而一旦不符合这原创 2011-09-26 16:09:48 · 986 阅读 · 0 评论 -
使图片 放大 缩小 原始 最佳
对图片进行放大等操作时,关键是找一个基准点--------也就是说,什么时候的图片为起始图片,所有的放大缩小都是参照这个图片进行的。在本例中 选择最佳图片为基准点。所谓最佳----------是指的 图片的宽与高都再可见视图中。 定义变量: CRect m原创 2011-09-26 11:33:19 · 2187 阅读 · 0 评论 -
使用InvalidateRect(rect) 防止图片移动时发生闪烁
Invalidate(); 执行时,是先用背景刷清屏以后,再重新绘画 InvalidateRect(rect), 他执行时, rect区域以背景刷清屏,rect以外的区域不调用背景刷,而是将屏幕上现有的内容(如图片图形等)作为背景,在这个背景上直接画图。 若是原创 2011-08-10 16:56:42 · 10560 阅读 · 1 评论 -
再谈鼠标移动画图时,图像不断闪烁问题
在前面一篇文章中版InvalidateRect( LPCRECT lpRect) 以及 RedrawWindow( LPCRECT lpRect) 中的重绘部分区域 是什么含义 曾提到鼠标移动时,其它图形也跟着闪烁的问题,当时用的方法是SetTim原创 2011-08-11 11:34:52 · 6641 阅读 · 0 评论 -
InvalidateRect( LPCRECT lpRect) 以及 RedrawWindow( LPCRECT lpRect) 中的重绘部分区域 是什么含义
Invalidate(),发送WM_PAINT消息 调用 OnPaint()重绘 InvalidateRect(rect),也是发送WM_PAINT消息,调用OnPaint()重绘 两个都是调用OnPaint(), 那它们有什么区别呢?InvalidateRec原创 2011-08-09 14:52:08 · 3325 阅读 · 0 评论 -
GDI+ 内存泄露
使用GDI+时,发现总是出现泄漏内存的错误,提示内存块43发生泄漏,但是发生泄漏的源文件是VC 内部文件,不是自己写的程序,然后利用DEBUGVIEW等工具,也是只能显示有内存泄漏情况,却不能找到源文件到底哪里有问题。 最后,又将自己的程序反复看了好几遍,NEW原创 2011-08-09 12:41:37 · 4322 阅读 · 3 评论 -
什么是双缓冲
以前,询问如何解决闪烁现象的办法时,很多人都会说使用双缓冲 可是,我却对双缓冲这个词感到莫名其妙 什么是双缓冲,为何叫双缓冲,为何双缓冲能降低闪烁现象呢? 双缓冲听起来好像很深奥,其实其本质很简单:就是先生成一张位图,然后把所有的绘图工作都画的这张位图原创 2011-09-05 15:11:13 · 7120 阅读 · 4 评论 -
*Bitmap 转换为 *Image
Bitmap 是Image的子类 因此,Bitmap类指针可以转换为Image类指针 下面的转换是没有问题的 Bitmap bmp(souceRectf.Width,souceRectf.Height); Image*pI原创 2011-09-05 17:05:32 · 8270 阅读 · 2 评论 -
不使用双缓冲 移动图片时 如何减少闪烁
思路: 不要使用Invalidate等函数 而是直接在DC上画图 这样,由于是在原有的背景上画图,差别很小,所以不会有明显的闪烁 但是,必须将图片移动时所形成的那个矩形区域轨迹 用背景色原创 2011-08-31 17:13:32 · 1423 阅读 · 0 评论