GDI/GDI+
zgl7903
iPad回帖太累人
展开
-
由给定的端点和控制点 计算3次 Bezier 曲线
#include <math.h>//计算3次 Bezier 曲线//P0 P3 端点//P1 P2 控制点//ix 输入X//oy 输出Y//有效时返回truebool CalBezier3(POINT P0, POINT P1, POINT P2, POINT P3, double ix, double &oy){ double t, y, x1=0, x2=1, y1; //超过控制点范围? if(ix <P0.x || ix >P3..原创 2020-10-28 20:55:29 · 2267 阅读 · 0 评论 -
贝塞尔曲线绘制
#include //计算阶乘double Cal_Factorial(int n){ double fFactorial = 1; for(int i=2; i<=n; i++) fFactorial *= i; return fFactorial;}//贝塞尔实现BOOL _PolyBezier(HDC hDC, //目标DC co原创 2012-07-20 07:46:56 · 1144 阅读 · 0 评论 -
WINAPI 拷贝指定的hDC的lpRect部分到文件Dstfile中(BMP文件格式)
#include #include //WINAPI 拷贝指定的hDC的lpRect部分到文件Dstfile中(BMP文件格式)BOOL SaveHDCToFile(HDC hDC, LPRECT lpRect, LPCTSTR Dstfile){ int Width = lpRect->right - lpRect->left; int Height = lpR原创 2012-08-05 11:31:07 · 1845 阅读 · 1 评论 -
使用GDI+ 保存HDC为位图文件
//GDI+为图片的加载、存储,屏蔽了内部编解码、压缩解压缩等的具体细节,给程序员带来了极大的方便//目前版本的GDI+支持bmp jpeg gif tiff png等几种格式//下面的程序基本思路是先将目标DC上的内容存到内存BITMAP//再使用GDI+Bitmap::FromHBITMAP加载内存位图,并保存成文件//此版本在Win32和MFC环境下测试通过////使原创 2011-08-05 12:38:01 · 6725 阅读 · 7 评论 -
GDI+ 保存指定的窗口为JPEG文件(X Y轴镜像功能可选)
#include #include #include #include using namespace Gdiplus; #pragma comment(lib, "gdiplus.lib") struct _GdiplusToken { Gdiplus::GdiplusStartupInput gdiplusStartupI原创 2012-08-09 21:09:20 · 3202 阅读 · 1 评论 -
使用CRgn::CombineRgn判断两个区域是否有共同的覆盖区域
BOOL CheckAreaOverlap(POINT *ptArray1, const int ptNum1, //区域1坐标点 坐标点数量 POINT *ptArray2, const int ptNum2) //区域2坐标点 坐标点数量{ CRgn rgn1, rgn2; if(rgn1.CreatePolygonRgn(ptAr原创 2013-05-10 13:35:35 · 1633 阅读 · 0 评论 -
解析JPGE文件 获取文件像素尺寸
SIZE GetJPGEImagePiex(LPCTSTR szFileName){ SIZE sizePiex={0,0}; HANDLE hFile = INVALID_HANDLE_VALUE; do { hFile = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_WRITE,原创 2013-08-16 09:24:18 · 1763 阅读 · 0 评论 -
获取单色位图指定坐标的数据
int GetMonoBMPData(LPBYTE pData, int nWidth, int x, int y){ int iOffset = y * (nWidth + 7)/8; //每行按字节对齐 iOffset += x/8; //每个像素占一位 UINT iData = pData[iOffset]; //所在的字节数据 return ((iData & (1<原创 2014-11-19 09:15:46 · 1562 阅读 · 0 评论 -
16进制字符模式的图标处理
16进制字符模式的图标处理原创 2016-01-13 15:39:02 · 2614 阅读 · 2 评论 -
使用 StretchBlt 制作 缩略图标
使用 StretchBlt 制作 缩略图标原创 2016-08-19 17:35:15 · 1415 阅读 · 2 评论 -
使用 SetDeviceGammaRamp 调整屏幕亮度
使用 SetDeviceGammaRamp 调整屏幕亮度原创 2017-08-01 10:13:57 · 4014 阅读 · 0 评论 -
多显示器环境中移动窗口到指定的显示器
//显示器信息结构体typedef struct _tagMyMonitorInfo_t{ HMONITOR hMonitor; MONITORINFOEX info; _tagMyMonitorInfo_t() { ZeroMemory(this, sizeof(*this)); }}MYMONITORINFO, *LPMYMONITORINFO;C...原创 2018-12-27 12:26:04 · 1446 阅读 · 2 评论 -
GDI+ 绘制模拟钟表
关键点: 窗口坐标(X轴向右,Y轴向下); 窗口角度逆时针; 关键函数DrawClock#if !defined(AFX_COLOCKSTATIC_H__619C9005_4652_45A8_BC24_801ECF6ED3EA__INCLUDED_)#define AFX_COLOCKSTATIC_H__619C9005_4652_45A8_BC24_801ECF6ED3EA__INCL...原创 2019-01-03 16:02:05 · 930 阅读 · 0 评论 -
由给定的点计算Bezier曲线
//计算 Bezier curve//cpt 端点及控制点//cn cpt的数量//st 准备计算多少步//pXY, X,Y的坐标输出BOOL CalBezier(POINT cpt[], int cn, int st, POINT *pXY){ int r,i,k; double t, t1; double coeffx[20], coeffy[20]; i...原创 2019-02-16 15:07:13 · 2817 阅读 · 1 评论 -
GDI+绘制雷达图
欢迎拍砖#include <atlimage.h>using namespace Gdiplus;class CRadarDrawClass{public: //绘制的单元 typedef struct _tagRadarItem_t { WCHAR szName[64]; //名称 float fValue; //数值 ...原创 2019-05-28 18:42:57 · 959 阅读 · 0 评论 -
使用算法实现线宽不为1的 Dash Line
//#include void DrawDashLine(CDC* pDC, LPPOINT ptStart, LPPOINT ptEnd, int nWidht, COLORREF crLine){ CPen pen(PS_DASH, nWidht, crLine); CPen *pOldPen = pDC->SelectObje原创 2012-07-20 14:35:10 · 1507 阅读 · 0 评论 -
使用数学方法绘制一光栅盘
//前两天看论坛上有人问怎么程序画齿轮的问题,觉得蛮有意思的,所以自己索性也画一个来玩玩//其实那严格说来不是齿轮,而是光栅编码器的光栅盘//程序以三角函数为基础,可以绘制任意角度下的任意齿数光栅盘//多余的话就不说了,上代码和图 #include //绘制光栅盘//pDC目标DC//rect目标区域//fAngleDeg 基线角度//TGrid原创 2012-07-08 12:24:34 · 1383 阅读 · 0 评论 -
使用SetLayeredWindowAttributes API 实现透明窗口
//bAlpha form 0 to 255//When bAlpha is 0, the window is completely transparent.//When bAlpha is 255, the window is opaque.BOOL SetWindowAlpha(HWND hwnd, BYTE bAlpha){ BOOL bRet = 0; HMOD原创 2010-04-04 23:18:00 · 3014 阅读 · 1 评论 -
OleLoadPicture 在指定窗口上绘制
#include #include #include #include #include "Shlwapi.h"#include #pragma comment(lib, "Shlwapi.lib")#ifndef VERIFY#ifdef _DEBUG#define VERIFY _ASSERT#else#define VERIFY(f) ((vo原创 2011-09-27 10:03:35 · 4919 阅读 · 0 评论 -
RGB和HLS颜色空间互相转换的类
#pragma once#include #pragma comment(lib, "shlwapi.lib")class CColor_RGB_HLS{ #define HLSMAX 240 /* H,L, and S vary over 0-HLSMAX */ #define RGBMAX 255 /* R,G, and B vary原创 2010-09-24 10:32:00 · 7649 阅读 · 0 评论 -
绘制位图字体
//IDB_BITMAP1为资源中的一张BMP位图图片 // 更改当前字体 LOGFONT lf; pDC->GetCurrentFont()->GetLogFont(&lf); lf.lfCharSet=134; lf.lfHeight= -MulDiv(200, pDC->GetDeviceCaps(LOGPIXELSY), 72); lf.lfWidth=原创 2010-04-26 21:58:00 · 1813 阅读 · 0 评论 -
绘制空心字
//绘制空心字 void DrawHollowChar(CDC *pDC, LPCTSTR szText) { int nSaveDC = pDC->SaveDC(); // 更改当前字体 LOGFONT lf; pDC->GetCurrentFont()->GetLogFont(&lf); lf.lfCharSet=13原创 2010-04-26 21:24:00 · 3251 阅读 · 1 评论 -
在指定的窗口指定的区域绘制指定的BMP图片
//显示位图//pWnd 显示窗口指针//rect 显示区域//bitMapFile 显示文件virtual BOOL Draw_Bitmap(CWnd *pWnd,CRect rect,LPCTSTR bitMapFile);virtual BOOL Draw_Bitmap(CWnd *pWnd,CRect rect,UINT IDB_BITMAP) {return(Draw原创 2008-07-30 19:54:00 · 905 阅读 · 0 评论 -
拷贝pWnd指向窗口的lpRect部分 写成BMP文件
//拷贝pWnd指向窗口的lpRect部分到文件Dstfile中(BMP文件格式)CopyScreenToFile(CWnd *pWnd, CRect *lpRect, LPCTSTR Dstfile){ if(!IsWindow(pWnd->GetSafeHwnd())) { AfxMessageBox("窗口句柄无效"); return (FALSE); }原创 2008-07-30 19:21:00 · 1912 阅读 · 2 评论 -
图片颜色掩码操作
//关键代码CBitmap * BmpColorMaskOp(CBitmap &bmpSrc, COLORREF colorMask, DWORD dwOp){ //图像信息 BITMAP bmpInfo; bmpSrc.GetBitmap(&bmpInfo); int nWidth = bmpInfo.bmWidth; int nHeigth = bmpIn原创 2011-05-13 10:27:00 · 2066 阅读 · 0 评论 -
图像灰度化处理
//图像灰度化处理void ImageGrayProcess(HBITMAP hBitmap, BOOL bAvgType=TRUE){ if(hBitmap) { CBitmap *bmpSrc = CBitmap::FromHandle(hBitmap); BITMAP bmSrcInfo; bmpSrc->GetBitmap( &bmSr原创 2010-11-01 21:23:00 · 1582 阅读 · 0 评论 -
从文件加载位图
BOOL ImageAnalyse(LPCTSTR szBMP){ //加载文件 HANDLE hBitmap = LoadImage (NULL, szBMP, IMAGE_BITMAP,0, 0, LR_LOADFROMFILE); ASSERT (hBitmap != NULL); //关联到位图 CBitmap m_bitmap; m_b原创 2010-04-18 22:52:00 · 750 阅读 · 0 评论 -
拷贝pWnd指向的窗口的指定区域到剪贴板
//拷贝pWnd指向的窗口的lpSrcRect到剪贴板//运行过此程序,可以打开画图进行粘贴测试CopyScreenToClipboard(CWnd *pWnd, CRect *lpSrcRect){ if(!IsWindow(pWnd->GetSafeHwnd())) { AfxMessageBox("窗口句柄无效"); return (FALSE); }原创 2008-07-30 19:19:00 · 839 阅读 · 0 评论 -
绘制镜像字体
//绘制镜像字体void Draw_Mirror_Text(CDC *pDst_DC,//目标设备句柄 CPoint dst_Point,//目标位置 LPCTSTR drawText,//目标字符串 COLORREF textColor, //字体颜色 bool Mirror_X,//X轴镜像 bool Mirror_Y //Y轴镜像原创 2008-05-24 09:49:00 · 2771 阅读 · 0 评论 -
在程序中使用JPEG等非BMP资源文件
GDI+ 中支持IStream加载图像,因此可以构建一个IStream流,实现从IStream加载图像1: 在CXXXXApp::InitInstance() 中添加 AfxOleInit(); 2: 资源编辑器中导入图片文件,如JPG,PNG等,并命名资源类型3: 修改头文件.h 代码如下4: 修改.cpp文件 代码如下注意资源名需要与代码中的资源名对应 //.h原创 2011-01-06 20:46:00 · 3184 阅读 · 4 评论 -
加载BMP文件 并绘制
BOOL LoadBitmapFromBMPFile( LPTSTR szFileName, HBITMAP *phBitmap, HPALETTE *phPalette ){ BITMAP bm; *phBitmap = NULL; *phPalette = NULL; // Use LoadImage() to get the image loaded into a DIBSecti原创 2008-10-25 22:42:00 · 1150 阅读 · 0 评论 -
AddFontMemResourceEx 安装资源中包含的字体
//经常遇到这样的情况,在非英文系统下编写好的软件在英文系统上运行时显示为乱码//大部分就是由于缺少必要的支持字体引起的//因此如果考虑在英文系统上使用这些字体,我们可以把必须的字体以资源的方式包含到应用程序中//这样既可以使程序能正常运行,同时也减少了程序打包的繁琐//hResInstance 资源句柄//lpsFont 字体资源ID//lpsType 字体资源类型void In原创 2012-05-28 20:29:36 · 4672 阅读 · 0 评论 -
使用AlphaBlend绘制透明度可调位图
//Transparence 0-100#pragma comment(lib, "msimg32.lib")void TranspareDraw(CDC *pDC, LPRECT lpRect, int Transparence){ CDC memDC; memDC.CreateCompatibleDC(pDC); CBitmap bitMap; bitMap原创 2010-04-27 22:06:00 · 1052 阅读 · 0 评论