保存hbitmap到文件

void SaveBitmapToFile(HBITMAP hBitmap, char* szfilename)
{HDC hdc;			//设备描述表int ibits;WORD wbitcount;     //当前显示分辨率下每个像素所占字节数//位图中每个像素所占字节数,定义调色板大小,位图中像素字节大小,位图文件大小 ,写入文件字节数DWORD dwpalettesize = 0, dwbmbitssize, dwdibsize, dwwritten;BITMAP bitmap;				//位图属性结构BITMAPFILEHEADER bmfhdr;	//位图文件头结构BITMAPINFOHEADER bi;		//位图信息头结构LPBITMAPINFOHEADER lpbi;	//指向位图信息头结构//定义文件,分配内存句柄,调色板句柄HANDLE fh, hdib, hpal, holdpal = NULL;//计算位图文件每个像素所占字节数hdc = CreateDC("display", NULL, NULL, NULL);ibits = GetDeviceCaps(hdc, BITSPIXEL) * GetDeviceCaps(hdc, PLANES);DeleteDC(hdc);if (ibits <= 1)wbitcount = 1;else if (ibits <= 4)wbitcount = 4;else if (ibits <= 8)wbitcount = 8;else if (ibits <= 16)wbitcount = 16;else if (ibits <= 24)wbitcount = 24;elsewbitcount = 32;//计算调色板大小if (wbitcount <= 8)dwpalettesize = (1 << wbitcount) * sizeof(RGBQUAD);//设置位图信息头结构GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bitmap);bi.biSize = sizeof(BITMAPINFOHEADER);bi.biWidth = bitmap.bmWidth;bi.biHeight = bitmap.bmHeight;bi.biPlanes = 1;bi.biBitCount = wbitcount;bi.biCompression = BI_RGB;bi.biSizeImage = 0;bi.biXPelsPerMeter = 0;bi.biYPelsPerMeter = 0;bi.biClrUsed = 0;bi.biClrImportant = 0;dwbmbitssize = ((bitmap.bmWidth * wbitcount + 31) / 32) * 4 * bitmap.bmHeight;//为位图内容分配内存hdib = GlobalAlloc(GHND, dwbmbitssize + dwpalettesize + sizeof(BITMAPINFOHEADER));lpbi = (LPBITMAPINFOHEADER)GlobalLock(hdib);*lpbi = bi;// 处理调色板 hpal = GetStockObject(DEFAULT_PALETTE);if (hpal){hdc = ::GetDC(NULL);holdpal = SelectPalette(hdc, (HPALETTE)hpal, false);RealizePalette(hdc);}// 获取该调色板下新的像素值GetDIBits(hdc, hBitmap, 0, (UINT)bitmap.bmHeight, (LPSTR)lpbi + sizeof(BITMAPINFOHEADER) + dwpalettesize, (BITMAPINFO*)lpbi, DIB_RGB_COLORS);//恢复调色板 if (holdpal){SelectPalette(hdc, (HPALETTE)holdpal, true);RealizePalette(hdc);::ReleaseDC(NULL, hdc);}//创建位图文件 fh = CreateFile(szfilename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);if (fh == INVALID_HANDLE_VALUE)return false;// 设置位图文件头bmfhdr.bfType = 0x4d42; // "bm"dwdibsize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) +dwpalettesize + dwbmbitssize;bmfhdr.bfSize = dwdibsize;bmfhdr.bfReserved1 = 0;bmfhdr.bfReserved2 = 0;bmfhdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) +(DWORD)sizeof(BITMAPINFOHEADER) + dwpalettesize;//写入位图文件头WriteFile(fh, (LPSTR)&bmfhdr, sizeof(BITMAPFILEHEADER), &dwwritten, NULL);//写入位图文件其余内容WriteFile(fh, (LPSTR)lpbi, dwdibsize, &dwwritten, NULL);//清除 GlobalUnlock(hdib);GlobalFree(hdib);CloseHandle(fh);
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux rz批量上传

rz -be 转载于:https://www.cnblogs.com/hh6plus/p/5548082.html

Linux makefile 教程 很具体,且易懂

近期在学习Linux下的C编程&#xff0c;买了一本叫《Linux环境下的C编程指南》读到makefile就越看越迷糊&#xff0c;可能是我的理解能不行。 于是google到了下面这篇文章。通俗易懂。然后把它贴出来&#xff0c;方便学习。 后记&#xff0c;看完发现这篇文章和《Linux环境下的C…

不要怂!就是干!

来大学快两个月了&#xff0c;总的来说还可以&#xff0c;顺利进入了学生会&#xff0c;成为了ACM协会的外部人员&#xff0c;没有水土不服关系不合等大碍&#xff0c;一切都很正常。 可是&#xff0c;我最害怕的事还是发生了&#xff0c;C语言的学习遇到了瓶颈&#xff0c;往前…

JQuery学习记录——DOM的加载

一、加载DOM 在页面加载完毕后&#xff0c;浏览器会通过javaScript为DOM元素加载事件&#xff0c;在js中通常使用window.οnlοadfunction(){...}方法&#xff0c;在JQuery中使用$(document).ready(function(){...})&#xff0c;或简写成$(function{...})&#xff0c;这个方法使…

UE4 定时器

h文件 FTimerHandle MemberTimerHandle; void RepeatingFunction(); cpp文件 GetWorldTimerManager().SetTimer(MemberTimerHandle, this, &AMyStaticMeshActor::RepeatingFunction, 0.015f, true, 0.0f); 第三个参数是需要定时运行的逻辑函数 tick代理方式 h文件 FT…

CSU 1259 bfs找最短路

题目大意&#xff1a; 不想介绍&#xff0c;题目链接&#xff1a;http://acm.csu.edu.cn/OnlineJudge/problem.php?id1259 bfs求最短路。 这里因为2-9&#xff0c;到达同样的点不计步数&#xff0c;那我们不能每次bfs都遍历一个图找到所有相同的点&#xff0c;所以这里用vecto…

如何改善虚幻引擎中的游戏线程CPU性能表现

您游戏中的帧频率是不是太低&#xff1f; 您了解为什么会发生这种现象吗&#xff1f; 这是不是由于您同时生成了太多敌人&#xff1f;还是由于某个特定敌人过于消耗系统资源&#xff1f; 是由于您设置了过多的视觉特效&#xff0c;还是由于您所设计的战斗系统所造成的&#xff…

mysql timeout

&#xff08;待更新整理&#xff09; 因为最近遇到一些超时的问题&#xff0c;正好就把所有的timeout参数都理一遍&#xff0c;首先数据库里查一下看有哪些超时&#xff1a; rootlocalhost : test 12:55:50> show global variables like "%timeout%"; -----------…

UE 光影参数

平行光的光影效果参数 天光的光影效果参数 让材质不反射光&#xff0c;也就是材质本身的颜色不起作用&#xff0c;只能使用自发光 去掉模型光影效果

《BI项目笔记》多维数据集中度量值设计时的聚合函数

Microsoft SQL Server Analysis Services 提供了几种函数&#xff0c;用来针对包含在度量值组中的维度聚合度量值。默认情况下&#xff0c;度量值按每个维度进行求和。但是&#xff0c;通过 AggregateFunction 属性&#xff0c;您可以修改此行为。聚合函数的累加性可确定度量值…

零基础Unreal Engine 4(UE4)图文笔记之粒子系统

1.我们需要创建两个东西&#xff0c;一个材质一个粒子。先打开材质&#xff0c;在制作粒子之前&#xff0c;我们首先需要自己创建一个粒子效果能用的材质 在材质编辑器中&#xff0c;修改细节中Blend Mode类型为Translucent&#xff0c;Shading Model 为Unit&#xff0c;这一步…

string.Format 指定字符串宽度

语法: { index[,alignment][:formatString]} index,为索引号,不用多说.alignment,是一个带符号的整数,绝对值的大小表示字段的宽度.formatString,格式字符串组件.需要注意的是,alignment对于字符串是不起作用的.转载于:https://www.cnblogs.com/listened/p/4052078.html

[UE4]性能优化指南(程序向)

零散记录 GPUProfile来统计性能消耗的时候&#xff0c;在editor模式下不是很准&#xff0c;因为编辑器的消耗也算进去了&#xff0c;如果要用&#xff0c;最好以Game模式来查看。UE4不支持640X480的分辨率&#xff0c;如果在这个分辨率下运行程序&#xff0c;会导致程序崩溃&a…

武汉大学2013年数学分析考研试题参考解答

来源 [尊重原有作者劳动成果] 一&#xff1a; 1&#xff1a;解&#xff1a;\[\because \underset{x\to 0}{\mathop{\lim }}\,\ln (1x)x\] \[\therefore \underset{x\to 0}{\mathop{\lim }}\,\frac{\sqrt[n]{1x}-1}{\ln (1x)}\underset{x\to 0}{\mathop{\lim }}\,\frac{\sqrt[n]…

[UE4]性能优化指南(美术向)

参考自官方文档&#xff1a; Performance Guidelines for Artists and Designershttps://docs.unrealengine.com/en-us/Engine/Performance/Guidelines 但是官方文档写的太粗燥&#xff0c;对UE4没有一定了解&#xff0c;很难理解文档的意图。这里我在官方文档的基础上&#x…

HTTP协议中返回代码302的情况

http协议中&#xff0c;返回状态码302表示重定向。 这样的情况下&#xff0c;server返回的头部信息中会包括一个 Location 字段&#xff0c;内容是重定向到的url 转载于:https://www.cnblogs.com/mengfanrong/p/4059628.html

UE4 Fix – “Lighting build failed. Swarm failed to kick off.”

Hello! Have you encountered the “Swarm Failed to Kick Off” error on an Unreal Engine project when trying to build a level? I did, after we switched to a custom engine build. Since most of the resources on the web were not helpful. Here’s a really simpl…

贪吃蛇 WPF

贪吃蛇 WPF using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Threading; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Wind…

Linux修改开机启动logo

默认开机LOGO会在液晶屏的左上脚显示一只小企鹅&#xff0c;分辨率为80*80&#xff0c;具体在kernel/drivers/video/logo下会有logo_linux_clut224.ppm这幅图像&#xff0c;程序会根据这幅图像生成logo_linux_clut224.c和 logo_linux_clut224.o两个文件&#xff0c;最终将小企…