社区
图形处理/算法
帖子详情
有没有API可以直接使HDC变黑变暗
蒙飞鸿
2012-02-02 04:54:34
用GetDIBits,然后每个点计算,然后再SetDIBits来做的话,比较麻烦,有没有如题的API?
...全文
145
17
打赏
收藏
有没有API可以直接使HDC变黑变暗
用GetDIBits,然后每个点计算,然后再SetDIBits来做的话,比较麻烦,有没有如题的API?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
蒙飞鸿
2012-03-12
打赏
举报
回复
环境前提是不使用非VC6“内置”函数,用S(G)etDIBits实现了,不过11楼可能是个运行效率更好的办法。
三条猫
2012-02-07
打赏
举报
回复
楼主看看AlphaBlend这个函数,创建一个全黑的memdc,然后和原dc混合一下
三条猫
2012-02-07
打赏
举报
回复
用alpha混合一个黑的DC就行了吧?
蒙飞鸿
2012-02-07
打赏
举报
回复
[Quote=引用 13 楼 sky_kid 的回复:]
做图,用几张png设透明度不一样的图贴几次试试。
[/Quote]
贴图很耗资源,会卡
SKy_kid
2012-02-06
打赏
举报
回复
做图,用几张png设透明度不一样的图贴几次试试。
蒙飞鸿
2012-02-06
打赏
举报
回复
[Quote=引用 11 楼 lactoferrin 的回复:]
你可以用CreateDIBSection,这样就可以直接修改内容,不用GetDIBits,SetDIBits
[/Quote]
要是能贴用这个API实现的10楼的函数的代码就好了......
Lactoferrin
2012-02-06
打赏
举报
回复
你可以用CreateDIBSection,这样就可以直接修改内容,不用GetDIBits,SetDIBits
蒙飞鸿
2012-02-06
打赏
举报
回复
void MakeHDCDark(HDC& sHdc, FLOAT ratios)
{
unsigned char * pBmpBK = NULL;
HDC hDcCopy = CreateCompatibleDC(sHdc);
HBITMAP bCurBk = CreateCompatibleBitmap(sHdc, WINWIDTH, WINHEIGHT);
HBITMAP hBkOldBmp =(HBITMAP)SelectObject(hDcCopy,bCurBk);
BitBlt(hDcCopy,0,0,WINWIDTH,WINHEIGHT,sHdc,0,0,SRCCOPY);
BITMAP bmpBK;
GetObject(bCurBk,sizeof(BITMAP),&bmpBK);
BITMAPINFO bminfo1 = {0};
bminfo1.bmiHeader.biSize = sizeof(bminfo1.bmiHeader);
GetDIBits(hDcCopy,bCurBk,0,bmpBK.bmHeight,NULL,&bminfo1,DIB_RGB_COLORS);
pBmpBK = new unsigned char [bminfo1.bmiHeader.biSizeImage];
GetDIBits(hDcCopy,bCurBk,0,bmpBK.bmHeight,pBmpBK,&bminfo1,DIB_RGB_COLORS);
int size2 = bminfo1.bmiHeader.biSizeImage;
for (int i = 0; i < bminfo1.bmiHeader.biSizeImage; i ++)
{
pBmpBK[i] = pBmpBK[i] * ratios;
}
int l = SetDIBits(hDcCopy,bCurBk,0,bmpBK.bmHeight,pBmpBK,&bminfo1,DIB_RGB_COLORS);
BitBlt(sHdc,0,0,WINWIDTH,WINHEIGHT,hDcCopy,0,0,SRCCOPY);
SelectObject(hDcCopy,hBkOldBmp);
delete[] pBmpBK;
DeleteObject(bCurBk);
DeleteDC(hDcCopy);
}
/////////////////////////////////
刚刚封装了,不过感觉效率不太行,程序变得有点卡了
Lactoferrin
2012-02-06
打赏
举报
回复
你干脆自己做个函数封装GetDIBits和SetDIBits
蒙飞鸿
2012-02-06
打赏
举报
回复
[Quote=引用 7 楼 lactoferrin 的回复:]
弄个循环调用FillRect
[/Quote]
不行的,FillRect一用,就覆盖了,没有半透明渐变的效果.
Lactoferrin
2012-02-06
打赏
举报
回复
弄个循环调用FillRect
蒙飞鸿
2012-02-06
打赏
举报
回复
要变黑,是渐变啊,直接FillRect没有渐变的过程,貌似没有半透明画刷机制来通过FillRect实现
用户 昵称
2012-02-03
打赏
举报
回复
gdi里面没有对应的api,可以看看gdi+或者一些图像库里面有没有效率高的函数。
写不动代码的人
2012-02-02
打赏
举报
回复
FillSolidRect
SuperLy
2012-02-02
打赏
举报
回复
当然,如果原先不是均一色,无法填充,那就只有搞个黑bmp,或者用黑Brush之类画上去...
SuperLy
2012-02-02
打赏
举报
回复
填充黑色就可以了。
BOOL FloodFill(
HDC hdc, // handle to DC
int nXStart, // starting x-coordinate
int nYStart, // starting y-coordinate
COLORREF crFill // fill color
);
smwhotjay
2012-02-02
打赏
举报
回复
搞个黑bmp, hdc selectobj . hdc就黑了.
VB与
API
学习笔记(6)绘图DC
DC操作同窗体一样,取得DC句柄,即
hDC
.也是Long型 一个窗体对应一个DC,没有DC的窗体(控件也叫窗体),可以根据它的句柄来创建一个DC(上升到对象概念)。 DC在内存中是很占资源的,所以没有必要时,要进行释放它。 DC与windowDC是不同上,windowDC包含最上面的非工作区(一般由系统控制),如上面的图。各自绘图的区域就限制了。 看一个例子:先看图: 是有点奇怪
WIN32
API
讲座7
第七课∶位图一、概述 在Windows中每屏是一个图形图像,灵巧的Windows制作系统,面对庞大的图形编程任务,建立了为绘画多彩的边界、按钮、图标、字体的函数库。当然啦,通过Windows
API
,这些函数都是可调用的。所谓Windows显示屏幕以及数量众多的打印机其实都是属于“光栅设备”。在光栅设备中,一幅图象由多条扫描线以及能访问的单独像素构成。Windows也支持非光栅设
一些win32
API
函数
一、CreateWindowEx //创建一个具有扩展风格的层叠式窗口、弹出式窗口或子窗口(控件) HWND CreateWindowEx( DWORD dwExStyle, //窗口的扩展风格 LPCTSTR lpClassName, //已经注册的窗口类名称 LPCTSTR lpWindowName, //窗口标题栏的名字 ...
Windows常用
API
目录: 1:MessageBox -------------------------------- 1 2:MessageBox ---------------------------------4 3:MessageBox -------------------------------- 6 4:ShowWindow ----
Windows 下
API
详解
API
函数 //C#操作
API
用到的命名空间using System.Runtime.InteropServices; C#申明方法 EntryPoint="ShowWindow" 入口点在ExactSpelling为true 下找不到时才指定入口点即为
API
函名============================================================
图形处理/算法
19,468
社区成员
50,698
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章