32BPP窗口模式下24位位图的像素操作(2)
2011-01-02 22:51
295 查看
等测距卷轴的逻辑写的差不多了,结果发现之前写的位图至显示表面的代码有些问题,所以重写了一个函数,给定一个表面,基于表面的尺寸和传入的坐标,直接在BITMAP24_PTR上取图,取图后的表面直接就可用,先给出完整代码:
这个函数调通至完成单元测试搞了我一下午~哎,智商低没办法啊。
这也算是我转到C/C++后第一次做大规模内存内容上的调试,还不知道有什么好工具可用,所以自己写了一个先凑合着用,就是上面代码注释了的那个DisplayMemory的函数,代码如下:
问题解决了,终于能睡个好觉咯。
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); }
问题解决了,终于能睡个好觉咯。
相关文章推荐
- 32BPP窗口模式下24位位图的像素操作(1)
- VBO的像素操作,绘制24位位图
- 位图的像素操作练习(2012-05-25)
- 位图的像素操作练习(2012-05-25)
- Direct 窗口模式(非独占模式)贴图操作
- 为什么24位位图(真彩色)的biSizeImage不等于(biWidth*biBitCount+31)/32*4*biHeight?
- 56、vi常见用法,多窗口模式,标记,多文件编辑,快捷操作及设置
- BitmapEffect位图效果是简单的像素处理操作。它可以呈现下面几种特殊效果。
- ASP.NET 清除模式窗口数据缓存的操作方式
- 模式窗口对父窗口的操作
- 模式字母窗口操作
- 32.List的基本操作实战与基于模式匹配的List排序算法实现
- bmp位图和OpenGL的像素操作
- 解决CMS在IE8下模式窗口下操作又开启新窗口
- scala-32:List的基本操作实战与基于模式匹配的List排序算法实现
- IA-32操作模式
- Scala深入浅出实战经典:32,List的基本操作实战与基于模式匹配的List排序算法实现
- 运维日记007 - vim操作总结(三、可视化模式与多窗口)
- Intel 64和IA-32架构——操作模式