这个函数都做了什么?

erdgzw 2006-10-01 05:55:53
HBITMAP MakeImage(HBITMAP hBitmap)
{
HBITMAP hNewBmp;

if (hBitmap)
{
HDC hBufferDC = CreateCompatibleDC(NULL);
HGDIOBJ hPrevBufObject = SelectObject(hBufferDC, hBitmap);

HDC hDirectDC = CreateCompatibleDC(NULL); // DC for working
if (hDirectDC)
{
BITMAP bm;
GetObject(hBitmap, sizeof(bm), &bm);
BITMAPINFO bmInfo;
ZeroMemory(&bmInfo,sizeof(bmInfo));
bmInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmInfo.bmiHeader.biWidth = bm.bmWidth;
bmInfo.bmiHeader.biHeight = bm.bmHeight;
bmInfo.bmiHeader.biPlanes = 1;
bmInfo.bmiHeader.biBitCount = 32;
UINT* ptPixels;
HBITMAP hDirectBitmap = CreateDIBSection(hDirectDC,
(BITMAPINFO*)&bmInfo,
DIB_RGB_COLORS,(void**)&ptPixels, NULL, 0);
if (hDirectBitmap)
{
// 将hDirectBitmap放入hDirectDC中处理
HGDIOBJ hPrevBufDirObject = SelectObject(hDirectDC, hDirectBitmap);
// 当前将原hBitmap即屏幕的所有像素写入到hDirectDC
BitBlt(hDirectDC,0,0,bm.bmWidth,bm.bmHeight,hBufferDC,0,0,SRCCOPY);

int nSize = bm.bmWidth * bm.bmHeight;
for (int i=0; i<nSize; i++)
{
int iSrcR = (ptPixels[i]) & 0x00ff0000 >>16;
int iSrcG = (ptPixels[i]) & 0x0000ff00 >> 8;
int iSrcB = (ptPixels[i]) & 0x000000ff;

ptPixels[i] = RGB(iSrcR,iSrcG,iSrcB);
}
SelectObject(hDirectDC,hPrevBufDirObject);
hNewBmp = hDirectBitmap;
}
DeleteDC(hDirectDC);
}
SelectObject(hBufferDC, hPrevBufObject);
DeleteDC(hBufferDC);
}
return hNewBmp;
}

我感觉这个函数应该什么也没有改变啊!为什么会返回一个灰度化的一个位图呢?
...全文
203 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
w_anthony 2006-10-02
  • 打赏
  • 举报
回复
这代码会灰度化?应该是没有改变吧!?

ptPixels[i] = RGB(iSrcR,iSrcG,iSrcB);
的上面加一句iSrcR=iSrcG=iSrcB=0.3*iSrcR+0.59*iSrcG+0.11*iSrcB;
才会灰度化吧?
erdgzw 2006-10-01
  • 打赏
  • 举报
回复
弄明白了,应该改为:
int iSrcR = ((ptPixels[i]) & 0x00ff0000) >> 16;
int iSrcG = ((ptPixels[i]) & 0x0000ff00 )>> 8;
int iSrcB = ((ptPixels[i]) & 0x000000ff);
内容概要:本文介绍了基于10机39节点的电力系统仿真资源,依托Matlab与Simulink平台,构建了完整的电力系统动态仿真模型,涵盖系统建模、潮流计算、暂态稳定性分析、短路故障模拟及动态响应评估等核心内容。资源不仅实现了标准测试系统的还原,还进一步拓展至虚拟同步发电机(VSG)控制、储能系统集成、微电网优化调度等先进应用场景,深入探讨了现代电力系统中新能源接入、频率调节与电压支撑等关键技术问题,具有较强的理论深度与工程实践价值。; 适合人群:具备电力系统分析基础及Matlab/Simulink操作能力的高校研究生、科研人员和电力行业工程技术人员,特别适用于从事电力系统稳定性研究、新能源并网技术、智能电网优化控制等相关领域的专业人员。; 使用场景及目标:①用于电力系统教学与科研中的动态仿真与稳定性分析;②支持含高比例新能源的微电网、储能系统与虚拟同步机等新型设备的控制策略验证;③为电力系统故障诊断、暂态过程分析、运行优化与调度决策提供高精度仿真平台;④辅助完成学术论文复现、课题研究及创新性算法开发。; 阅读建议:建议读者结合所提供的Matlab代码与Simulink模型逐模块运行,深入理解系统参数设置、元件建模方法与仿真流程设计,重点关注故障设置、控制器配置与仿真结果分析环节。对于复杂控制策略部分,应配合相关理论文献进行对照学习,并尝试在现有模型基础上进行功能扩展与算法改进,以提升综合应用与创新能力。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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