字体模糊的解决办法 Windows Mobile
2008-06-24 11:03
232 查看
今天项目中有一个问题,用DC在一个24位的bitmap上写字体,字体竟然模糊了,因为Windows Mobile的屏幕颜色深度是16位的。
以下是一位网友的代码:
当压缩格式为 BI_BITFIELDS 时,在位图信息(即BITMAPINFOHEADER)后面接着三个DWORD型数据,就是掩码数据,
一般为:0xF800(兰色掩码),0x07E0(绿色掩码),0x001F(红色掩码),这是565的格式
如果为:0x7C00, 0x03E0, 0x001F, 则是555的格式(这也是bitcount=16,而压缩标志为BI_DIB时的默认格式)
BITMAPINFO *bitmapInfo = (BITMAPINFO*)malloc( sizeof(BITMAPINFO)+sizeof(RGBQUAD)*(255) );
memset( bitmapInfo, 0, sizeof(BITMAPINFO)+sizeof(RGBQUAD)*(255) );
bitmapInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bitmapInfo->bmiHeader.biWidth = m_uWidth;
bitmapInfo->bmiHeader.biHeight = uLineCount*uLineHeight + m_uLineSpace*(uLineCount-1);
bitmapInfo->bmiHeader.biPlanes = 1;
bitmapInfo->bmiHeader.biBitCount = 16;
bitmapInfo->bmiHeader.biCompression = BI_BITFIELDS;
bitmapInfo->bmiHeader.biSizeImage = 0;
bitmapInfo->bmiColors[0].rgbBlue = 0;
bitmapInfo->bmiColors[0].rgbGreen = 0xF8;
bitmapInfo->bmiColors[0].rgbRed = 0;
bitmapInfo->bmiColors[0].rgbReserved = 0;
bitmapInfo->bmiColors[1].rgbBlue = 0xE0;
bitmapInfo->bmiColors[1].rgbGreen = 0x07;
bitmapInfo->bmiColors[1].rgbRed = 0;
bitmapInfo->bmiColors[1].rgbReserved = 0;
bitmapInfo->bmiColors[2].rgbBlue = 0x1F;
bitmapInfo->bmiColors[2].rgbGreen = 0;
bitmapInfo->bmiColors[2].rgbRed = 0;
bitmapInfo->bmiColors[2].rgbReserved = 0;
m_hBitmap = CreateDIBSection( m_hCompatibleDc, bitmapInfo, DIB_RGB_COLORS, &pBitmapBuffer, NULL, NULL );
GetObject( m_hBitmap, sizeof(DIBSECTION), &dibSection );
把这个位图选入DC,然后draw text,字体就清楚了。
原因还不是很明白,应该是从24位转到16位,应该不会出这个问题的啊,不能看到Microsoft的代码。呵呵
特此记录解决问题的办法。
以下是一位网友的代码:
当压缩格式为 BI_BITFIELDS 时,在位图信息(即BITMAPINFOHEADER)后面接着三个DWORD型数据,就是掩码数据,
一般为:0xF800(兰色掩码),0x07E0(绿色掩码),0x001F(红色掩码),这是565的格式
如果为:0x7C00, 0x03E0, 0x001F, 则是555的格式(这也是bitcount=16,而压缩标志为BI_DIB时的默认格式)
BITMAPINFO *bitmapInfo = (BITMAPINFO*)malloc( sizeof(BITMAPINFO)+sizeof(RGBQUAD)*(255) );
memset( bitmapInfo, 0, sizeof(BITMAPINFO)+sizeof(RGBQUAD)*(255) );
bitmapInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bitmapInfo->bmiHeader.biWidth = m_uWidth;
bitmapInfo->bmiHeader.biHeight = uLineCount*uLineHeight + m_uLineSpace*(uLineCount-1);
bitmapInfo->bmiHeader.biPlanes = 1;
bitmapInfo->bmiHeader.biBitCount = 16;
bitmapInfo->bmiHeader.biCompression = BI_BITFIELDS;
bitmapInfo->bmiHeader.biSizeImage = 0;
bitmapInfo->bmiColors[0].rgbBlue = 0;
bitmapInfo->bmiColors[0].rgbGreen = 0xF8;
bitmapInfo->bmiColors[0].rgbRed = 0;
bitmapInfo->bmiColors[0].rgbReserved = 0;
bitmapInfo->bmiColors[1].rgbBlue = 0xE0;
bitmapInfo->bmiColors[1].rgbGreen = 0x07;
bitmapInfo->bmiColors[1].rgbRed = 0;
bitmapInfo->bmiColors[1].rgbReserved = 0;
bitmapInfo->bmiColors[2].rgbBlue = 0x1F;
bitmapInfo->bmiColors[2].rgbGreen = 0;
bitmapInfo->bmiColors[2].rgbRed = 0;
bitmapInfo->bmiColors[2].rgbReserved = 0;
m_hBitmap = CreateDIBSection( m_hCompatibleDc, bitmapInfo, DIB_RGB_COLORS, &pBitmapBuffer, NULL, NULL );
GetObject( m_hBitmap, sizeof(DIBSECTION), &dibSection );
把这个位图选入DC,然后draw text,字体就清楚了。
原因还不是很明白,应该是从24位转到16位,应该不会出这个问题的啊,不能看到Microsoft的代码。呵呵
特此记录解决问题的办法。
相关文章推荐
- 字体模糊的解决办法 Windows Mobile
- 字体模糊的解决办法 Windows Mobile(转)
- 字体模糊的解决办法 Windows Mobile
- NGUI 动态字体边缘模糊,毛边的问题解决办法
- google浏览器字体模糊问题(类似分辨率问题)解决办法
- iphone6 字体模糊解决办法
- 【转】解决Win7字体模糊不清晰的最佳办法
- 四叶草主题中字体模糊、透明无法看清的问题解决办法
- ultraEdit 关键字颜色 与 字体模糊 解决办法
- android 自定义软键盘时 字体模糊解决办法
- css3使用transform出现字体模糊的解决办法
- Visual studio 2008/2010 MFC程序Menu、Toolbar字体模糊偏小解决办法
- 关于字体模糊的解决办法---VS2010
- android studio字体模糊的解决办法
- Unity动态字体模糊的原因和解决办法
- unity-ugui的text字体模糊解决办法
- ultraEdit 关键字颜色 与 字体模糊 解决办法
- CrossOver 13.2.27771 mac 下字体模糊的解决办法
- win10更新后chrome字体模糊解决办法
- CrossOver 14.1(14.1.0.28539) mac 下字体模糊的解决办法