清水迎朝阳
多年windows下c++客户端开发,或多或少踩了很多坑,积累了一些经验
展开
-
GDI+ 绘制圆形头像
需求: 用户实际头像是长方形的,现在要绘制一个圆形的头像显示解决方法:在原图像上,添加一个圆形蒙版,圆形区域是透明的,其它是背景色。原创 2023-12-18 10:02:22 · 181 阅读 · 0 评论 -
互动直播 之 视频帧原始数据管理
连麦过程中,各种视频帧字节数据的处理原创 2023-11-20 11:17:46 · 519 阅读 · 0 评论 -
GDI+ 绘制透明图
DrawImage 构造函数很多,详情可查资料,是文件名(需要使用Unicode 编码),其它构造函数,没有用到,详情见参考资料。是色彩校正相关内容,默认值为。这里用来创建一个圆角矩形区域。这里只介绍自己这个项目用的。如下,是生成的一个透明图。原创 2023-11-09 10:51:58 · 369 阅读 · 0 评论 -
多显示器屏幕枚举方法
目录一、枚举方法1、EnumDisplayMonitors2、示例1)、示例12)、示例2二、显示器物理分辨率确定1、DPI影响后 显示器尺寸2、显示器物理尺寸一、枚举方法1、EnumDisplayMonitorsEnumDisplayMonitors function (winuser.h) - Win32 apps | Microsoft DocsBOOL EnumDisplayMonitors( [in] HDC hdc,...原创 2021-11-11 15:21:41 · 977 阅读 · 0 评论 -
系统DPI
几年前的机子分辨率普遍不高,但是也足够使用。但是近几年,分辨率越来越高,虽然分辨率高了,视觉可能会更好,但是很多软件一般都是只适应之前的低分辨率,导致在高分辨下,界面就会显得很小,很难分辨。这时可以开启DPI功能, 也就是缩放与布局,但是如果软件没有做这方面的适配,可能会出现界面混乱等现象。DPI缩放规则Windows 10操作系统针对dpi缩放制定了3种规则,每个进程...原创 2019-08-14 11:29:33 · 968 阅读 · 0 评论 -
libyuv库使用
libyuv是Google开源的实现各种YUV与RGB之间相互转换、旋转、缩放的库。https://github.com/lemenkov/libyuv下载,cmakerProject.sln工程,重新编译,即可生成libyuv.lib 静态库;编译好的库:https://download.csdn.net/download/shuilan0066/10665172导入...原创 2018-09-13 18:54:51 · 14885 阅读 · 1 评论 -
小学生都会的一个题,在图像处理中却十分常见,整理成一个小代码方便使用
需求,给定一个固定长宽的画布,将图片等比例绘制在画布中央原图相比画布更苗条时,左右留白原图相比画布更宽广时,则上下留白原创 2020-08-20 17:03:45 · 152 阅读 · 0 评论 -
狂吃内存 但调试时又不显示内存泄露的GDI/GDI+ 情况
作者:www.gudianxiaoshuo.com 为任性动图软件 添加字体、挂件特效后,运行时,发现运行一段时间就崩溃,经查证,是占用内存太多了,导致内存不够用。 但是在调试的时候并没有出现内存泄露的情况。 后来通过逐渐注释经过排查的代码后,发现了源头所在,是几个GDI\GDI+所导致,其中并没有我自己NEW 开辟的内存。 B原创 2015-11-22 12:17:45 · 2333 阅读 · 0 评论 -
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 · 2843 阅读 · 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 · 199 阅读 · 0 评论 -
GDI 总结二: 位图的绘制
在GDI有一个特点: 就是所有的图片绘制,都是通过DC来完成的。DC之间是可以相互传递的。 两个DC之中的图形 通过DC--->DC 来相互传递信息。 无论 位图--->屏幕原创 2011-12-20 15:23:54 · 6271 阅读 · 2 评论 -
GDI 总结一 CBitmap类
CBitmap类: class CBitmap : public CGdiObject{ DECLARE_DYNAMIC(CBitmap)public: static CBitmap* PASCAL FromHandle(HBITMAP hBitmap);// Constructors CBitmap(); BOOL LoadBitmap(LPCTS原创 2011-12-19 17:25:08 · 10680 阅读 · 5 评论 -
GDI+的一些问题
DrawImage(m_pBmp,destRC,0,0,source_w,source_h,UnitPixel); 原图很大13M,我本意是用这个语句只将原图中位于视图中的部分画到m_pBmp中,但是经过多次试验发现: 当destRC.width而一旦不符合这原创 2011-09-26 16:09:48 · 975 阅读 · 0 评论 -
GDI+ 内存泄露
使用GDI+时,发现总是出现泄漏内存的错误,提示内存块43发生泄漏,但是发生泄漏的源文件是VC 内部文件,不是自己写的程序,然后利用DEBUGVIEW等工具,也是只能显示有内存泄漏情况,却不能找到源文件到底哪里有问题。 最后,又将自己的程序反复看了好几遍,NEW原创 2011-08-09 12:41:37 · 4302 阅读 · 3 评论 -
GDI+ 总结二 : 为什么说CImage类是基于GDI+的?
在许多资料上都说CImage类是基于GDI+的,但是为什么是基于GDI+的呢? 因为使用这个类时,并没有加入#include ,也没有在程序开始和结束时分别写GDI+启动代码GdiplusStartupInput和结束代码GdiplusShutdown使用这个类时,仅仅需要添加头文件# include就可以了,比GDI+得使用要简单一些。 而CImage原创 2011-12-22 08:38:04 · 5668 阅读 · 2 评论 -
GDI 总结三: CImage类使用
若对您有所启发欢迎打赏古典小说网致力于打造极致阅读体验首创卡拉OK读书方式首创,桌面大屏幕TXT阅读方式前言 CImage类是基于GDI+的,但是这里为什么要讲归于GDI? 主要是基于这样的考虑: 在GDI+环境中,我们可以直接使用GDI+ ,没多少必要再使用CImage类...原创 2011-12-21 09:16:52 · 55399 阅读 · 7 评论 -
图像处理---区域透明图实现
在图片上指定一个圆角矩形,将此部分区域做透明处理1)将黑色设置为透明色的方式原理: 图片区域透明使用的原理是将图片某矩形区域统一置黑色,再指定黑色为透明色,绘制到目的图片中,这样在目的图片中,矩形部分就成为了透明区域 std::shared_ptr<Gdiplus::Bitmap> src_image_;方法1:...原创 2020-05-21 11:25:50 · 1381 阅读 · 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 · 609 阅读 · 0 评论 -
将灰度图像读取到数组中,然后再绘制的屏幕上
char p1[2500]; //50*50BOOL ReadGrayImg(CString path, char* pFlashImg){ memset(pFlashImg,0,sizeof(char)*2500); CImage Img; Img.Load(path); int nWidth = Img.GetWidth(); int nHeight = Img.Get原创 2012-09-14 16:32:26 · 3082 阅读 · 0 评论 -
索引图像的二值化
索引图像的二值化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 · 1691 阅读 · 0 评论 -
GDI+ 总结一: 保存图像文件
要将图像文件保存,必须先获得图像的编码格式信息,但是GDI+没有直接提供这个函数:GetEncoderClsid(const WCHAR* format, CLSID* pClsid)因此需要我们自己写一个 GetEncoderClsid 取得图像编码格式的函数幸好,有GetImageDecoders函数作为参照#include <windows.h>...原创 2011-12-22 08:37:29 · 10200 阅读 · 2 评论 -
CHandleImage 自己写的用GDI+处理图像的一个类
该类可以实现的功能: 在图像上选定某一矩形区域并查看 使用左右方向键调整矩形区域大小,使用向下方向键重新生成一个矩形区域 鼠标点击某区域,可以查看此区域内的图像 删除建立好的区域等 .原创 2011-10-09 10:51:57 · 1565 阅读 · 0 评论 -
使用GDI+灰度化图像
灰度化图像时,一定要根据原图像的像素格式,采取与之对应的灰度化方法,否则会出问题。 此函数灰度化原图像,并把灰度化后的图像保存在*pDesBitmap中( 注:有内存泄露,因为没有及时释放开辟的调色板空间,下面有修正版本)void NewImageView原创 2011-09-29 13:49:49 · 4600 阅读 · 1 评论 -
Image::FromFile() Bitmap::FromFile() 并不是将图像调入内存
Image::FromFile() Bitmap::FromFile() 并不是将图像调入内存,而是如同文件指针一样,用一个图像指针指向图像,对其进行操作。 m_pImage=Image::FromFile(str); m_pMemBmp=B原创 2011-09-28 15:31:00 · 7121 阅读 · 1 评论 -
再谈平移图像 简单却足以说明原理
方式一:第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 · 1546 阅读 · 1 评论 -
再谈鼠标移动画图时,图像不断闪烁问题
在前面一篇文章中版InvalidateRect( LPCRECT lpRect) 以及 RedrawWindow( LPCRECT lpRect) 中的重绘部分区域 是什么含义 曾提到鼠标移动时,其它图形也跟着闪烁的问题,当时用的方法是SetTim原创 2011-08-11 11:34:52 · 6600 阅读 · 0 评论 -
BMP图像经过BitBlt缩放处理后质量变得很差怎样改变图片尺寸
1楼 siphonelee 发表于:2009-08-10 03:51:23 引用 看你要求多专业了 一般的要求可以BitBlt或者StretchBlt 否则就要用分形图形学的东西了2楼 Alexa 发表于:2009-08-10 03:51:23 引用嗬嗬,说错了,是在用StretchBlt处理到四分之一大小时,图片上有很多黑点出现转载 2009-10-27 13:54:00 · 2378 阅读 · 0 评论 -
GDI+ 小知识点总结
1 加载图片 1)普通变量方式 Image image(L"Grapes.jpg"); graphics.DrawImage(&image,0,0); 2)指针方式 Image *pImage; CString imagePath=_T("c:\\Image.jpg"); pImage=new Image(...原创 2011-11-22 13:02:21 · 1834 阅读 · 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 · 1421 阅读 · 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 · 1309 阅读 · 0 评论