当前位置: 首页 > news >正文

32BPP窗口模式下24位位图的像素操作(2)

等测距卷轴的逻辑写的差不多了,结果发现之前写的位图至显示表面的代码有些问题,所以重写了一个函数,给定一个表面,基于表面的尺寸和传入的坐标,直接在BITMAP24_PTR上取图,取图后的表面直接就可用,先给出完整代码:

int PickBitmap(LPDIRECTDRAWSURFACE7 lpdds, BITMAP24_PTR bitmap, LONG ddsWidth, LONG ddsHeight, LONG cx, LONG cy) { LONG bitmapWidth = bitmap->infoHeader.biWidth; LONG bitmapHeight = bitmap->infoHeader.biHeight; DDSURFACEDESC2 ddsd; DDRAW_INIT_STRUCT(ddsd); lpdds->Lock(NULL, &ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL); int mempitch = ddsd.lPitch; UCHAR *ddsBuffer = (UCHAR *)(ddsd.lpSurface); for (LONG dy = 0, by = cy; dy < ddsHeight; ++dy, ++by) { memcpy(ddsBuffer + dy * mempitch, bitmap->buffer + cx * 4 + by * bitmapWidth * 4, 4 * ddsWidth); } //DisplayMemory(ddsBuffer, mempitch * ddsHeight); lpdds->Unlock(NULL); return 1; }

这个函数调通至完成单元测试搞了我一下午~哎,智商低没办法啊。

这也算是我转到C/C++后第一次做大规模内存内容上的调试,还不知道有什么好工具可用,所以自己写了一个先凑合着用,就是上面代码注释了的那个DisplayMemory的函数,代码如下:

char hextable[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; void DisplayMemory(UCHAR *buffer, LONG size) { char *msg = (char *)malloc(size * 3 + 1); for (LONG i = 0; i < size; ++i) { char c1, c2, c3; c1 = hextable[((int)(buffer[i])) / 16]; c2 = hextable[((int)(buffer[i])) % 16]; c3 = ' '; msg[i * 3] = c1; msg[i * 3 + 1] = c2; msg[i * 3 + 2] = c3; } msg[size*3] = '\0'; MessageBox(NULL, msg, "Memory", MB_OK); free(msg); }

问题解决了,终于能睡个好觉咯。

相关文章:

  • 帮你的WordPress博客添加主页、文章页的关键字和描述
  • 域名带www与不带www重定向问题
  • 引用和指针
  • 301重定向www域名
  • sass入门
  • 实现一个均匀Tile的卷轴显示引擎
  • linux rpm包解压
  • 教你彻底实现红黑树:红黑树的c源码实现与剖析
  • 【one day one linux】好用的数据处理工具awk
  • 新年新起点-荣获2011年度Silverlight方向Microsoft® MVP奖
  • java,关于POJO,查阅资料
  • 阅读计划
  • Android Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
  • 基于tiny4412的Linux内核移植 -- 设备树的展开
  • 浅谈股市、美元汇率与原油价和黄金价格间的关系
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【Linux系统编程】快速查找errno错误码信息
  • 2019年如何成为全栈工程师?
  • CEF与代理
  • JavaScript函数式编程(一)
  • Java-详解HashMap
  • Just for fun——迅速写完快速排序
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 翻译--Thinking in React
  • 普通函数和构造函数的区别
  • 系统认识JavaScript正则表达式
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 用Visual Studio开发以太坊智能合约
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (4) PIVOT 和 UPIVOT 的使用
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (算法二)滑动窗口
  • (转)Google的Objective-C编码规范
  • (转)jQuery 基础
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (转载)(官方)UE4--图像编程----着色器开发
  • 、写入Shellcode到注册表上线
  • .net 受管制代码
  • .Net(C#)常用转换byte转uint32、byte转float等
  • /etc/motd and /etc/issue
  • [Android]Tool-Systrace
  • [C#]C# winform部署yolov8目标检测的openvino模型
  • [C++核心编程](四):类和对象——封装
  • [CLR via C#]11. 事件
  • [FT]chatglm2微调
  • [go] 迭代器模式
  • [IE编程] IE8 新增的C++开发接口
  • [JMS 3] ActiveMQ实现简单的helloworld
  • [lesson17]对象的构造(上)