摘要:
所有API都需要通过兼容性测试,才说明这个API没有问题,达到可以使用的程度。下面这段代码就是测试API的兼容性,当测试到GetPixel函数时,就发现有一个BUG,就是最后一行,当希望这个单色的图片返回0xFFFFFF值,但在ROS返回是0值。说明这个API函数在单色处理上存在问题,那么怎么样修改这个问题呢?#001 HDC hdc, hdcmem;#002 DWORD bits[64];#003 HBITMAP hbmp, oldhbmp;#004 COLORREF col;#005 int i, bitspixel;#006 #007 /* fill bitmap data with b 阅读全文
posted @ 2010-02-10 23:54
ajuanabc
阅读(109)
评论(0)
推荐(0)
摘要:
PALETTE_Init函数是用来创建系统调色板。具体实现如下:#001 HPALETTE FASTCALL PALETTE_Init(VOID)#002 {#003 int i;#004 HPALETTE hpalette;#005 PLOGPALETTE palPtr;#006 #ifndef NO_MAPPING#007 PALOBJ *palObj;#008 #endif#009 创建系统20种缺省的颜色。#010 // create default palette (20 systemcolors)分配20种颜色的调色板占用的内存空间。#011 palPtr = ExAllocate 阅读全文
posted @ 2010-02-09 23:09
ajuanabc
阅读(131)
评论(0)
推荐(0)
摘要:
系统调色板相关功能的代码在文件subsys/win32k/eng/palette.c里。什么是调色板呢?其实调色板就是当一种图像不是使用到所有颜色时,使用的一种索引技术,以便减少图像保存的大小。一幅图像,如果要按真彩色表达,那么就是256×256×256颜色;如果按256色表示,那就只使用到256个颜色,比起真彩色来说是少了很多空间。把一幅图像里所有包括的颜色生成一张表格,这张表格就叫做调色板。图像保存的数据时并不保存颜色的真实值,而是保存调色板里的索引值。#001 typedef struct tagLOGPALETTE {#002 WORDpalVersion;#003 阅读全文
posted @ 2010-02-08 21:39
ajuanabc
阅读(122)
评论(0)
推荐(0)
摘要:
GetPixel函数是从指定DC里获取指定位置的颜色值。#001 COLORREF#002 WINAPI#003 GetPixel( HDC hDC, INT x, INT y )#004 {如果句柄不是DC,就返回非法的。#005 if (GDI_HANDLE_GET_TYPE(hDC) !=GDI_OBJECT_TYPE_DC) return CLR_INVALID;#006 if (!GdiIsHandleValid((HGDIOBJ) hDC)) returnCLR_INVALID;调用函数NtGdiGetPixel返回指定颜色值。#007 return NtGdiGetPixel( 阅读全文
posted @ 2010-02-07 10:35
ajuanabc
阅读(121)
评论(0)
推荐(0)
摘要:
SelectObject函数是将对象选定到指定的设备场境中。具体实现代码如下:#001 HGDIOBJ#002 WINAPI#003 SelectObject(HDC hDC,#004 HGDIOBJ hGdiObj)#005 {#006 PDC_ATTR pDc_Attr;#007 HGDIOBJ hOldObj = NULL;#008 UINT uType;#009 //PTEB pTeb;#010 获取这个HDC相关的属性。#011 if(!GdiGetHandleUserData(hDC,GDI_OBJECT_TYPE_DC, (PVOID)&pDc_Attr))#012 {# 阅读全文
posted @ 2010-02-06 20:52
ajuanabc
阅读(263)
评论(0)
推荐(0)
摘要:
NtGdiCreateBitmap函数是创建一个位图句柄。#001 HBITMAP APIENTRY#002 NtGdiCreateBitmap(#003 INT Width,#004 INT Height,#005 UINT Planes,#006 UINT BitsPixel,#007 INOPTIONAL LPBYTE pUnsafeBits)Width是位图宽度。Height是位图高度。Planes是位图中颜色面的数目。BitsPixel是标识单个像素的颜色所需的位数。pUnsafeBits是指向由字节组成的数组的指针,该数组中包含像素数据。矩形中每条扫描线都必须字对齐。#008 {# 阅读全文
posted @ 2010-02-05 21:33
ajuanabc
阅读(144)
评论(0)
推荐(0)
摘要:
转自:InfoQ 作者 Abel Avram 译者 张龙 发布于 2010年1月30日 上午12时6分 目前Web Hypertext Application Technology Working Group(WHATWG)正与W3C通力合作建立HTML 5标准,在过去3个月中,该项工作已经进入到了WHATWG的“Last Call”阶段。在这期间,变化最大的一个特性就是iframe元素的sandbox属性。sandbox属性可以防止不信任的... 阅读全文
posted @ 2010-02-05 10:59
ajuanabc
阅读(246)
评论(0)
推荐(0)
摘要:
CreateBitmap函数是创建具有给定宽度、高度和颜色格式的、以颜色位值构成的数组为基础的位图。#001 HBITMAP WINAPI#002 CreateBitmap(INT Width,#003 INT Height,#004 UINT Planes,#005 UINT BitsPixel,#006 PCVOID pUnsafeBits)#007 {#008 /* FIXME some part should be done in usermode */#009 if (Width && Height)#010 {如果有宽度和高度,就调用内核函数NtGdiCreateB 阅读全文
posted @ 2010-02-04 21:23
ajuanabc
阅读(125)
评论(0)
推荐(0)
摘要:
GetDC函数是通过窗口的句柄获取设备环境,这样就可以把获取到的设备环境使用到后面的GDI函数里,这样就可以在窗口的客户区中绘图了。当应用程序结束时,需要使用ReleaseDC来释放设备环境。如果是私有设备时,就可以不删除它。这个API实现函数如下:#001 EXTINLINE HDC WINAPI#002 GetDC(HWND hWnd)#003 {这里调用函数NtUserGetDC来实现相应的功能。#004 return NtUserGetDC(hWnd);#005 }NtUserGetDC函数是在内核WIN32K里实现的,如下:#001 HDC APIENTRY#002 NtUserGe 阅读全文
posted @ 2010-02-02 22:43
ajuanabc
阅读(334)
评论(0)
推荐(0)