Gdiplus的坑:通过DrawImage进行放大不是很靠谱
来源:互联网 发布:centos apache php 编辑:程序博客网 时间:2024/05/12 22:48
由于DrawImage指定destRect和srcRect绘制后,会自动把原图放大到destRect的大小,实现了放大效果,这是很通常的做法;
但如果要求放大得很精确的时候,比如需要将原图放大到destRect后再平铺到整个窗口,这里面其实有个很严重的问题;
比如运行一下如下代码:
if (g_pSrcImage != NULL) { Graphics graphics(hDC); Rect zoomRect(0, 0, g_pSrcImage->GetWidth() * 7, g_pSrcImage->GetHeight() * 7); Bitmap* pImageScale = new Bitmap(zoomRect.Width, zoomRect.Height); if (pImageScale != NULL) { Graphics graphicsScale(pImageScale); graphicsScale.Clear(Color(0, 255, 0)); //填充绿色 graphicsScale.DrawImage(g_pSrcImage, zoomRect, 0, 0, g_pSrcImage->GetWidth(), g_pSrcImage->GetHeight(), UnitPixel); graphics.DrawImage(pImageScale, 0, 0, zoomRect.X, zoomRect.Y, zoomRect.Width, zoomRect.Height, UnitPixel); delete pImageScale; pImageScale = NULL; } }这是一个典型的通过DrawImage等比放大的代码,但实际结果是zoomRect并没有被充满,右边和下边都多出了几个像素预填充的绿色;
再拿这张放大后的图去平铺那就大悲剧了,好多绿色分割线……
解决办法是先使用ScaleTransform设置放大比例,再用FillRectangle把原图填充到zoomRect,代码如下:
if (g_pSrcImage != NULL) { Graphics graphics(hDC); Rect zoomRect(0, 0, g_pSrcImage->GetWidth() * 7, g_pSrcImage->GetHeight() * 7); Bitmap* pImageScale = new Bitmap(zoomRect.Width, zoomRect.Height); if (pImageScale != NULL) { Graphics graphicsScale(pImageScale); graphicsScale.Clear(Color(0, 255, 0)); //填充绿色 // 方法一:正确方法 TextureBrush brush(g_pSrcImage); graphicsScale.ScaleTransform((REAL)((REAL)zoomRect.Width / (REAL)g_pSrcImage->GetWidth()), (REAL)((REAL)zoomRect.Height / (REAL)g_pSrcImage->GetHeight())); graphicsScale.FillRectangle(&brush, zoomRect); // 方法二:右边和下边会有几个像素预填充的绿色 //graphicsScale.DrawImage(g_pSrcImage, zoomRect, 0, 0, g_pSrcImage->GetWidth(), g_pSrcImage->GetHeight(), UnitPixel); graphics.DrawImage(pImageScale, 0, 0, zoomRect.X, zoomRect.Y, zoomRect.Width, zoomRect.Height, UnitPixel); delete pImageScale; pImageScale = NULL; } }
0 0
- Gdiplus的坑:通过DrawImage进行放大不是很靠谱
- Gdiplus通过DrawImage进行缩放边框出现颜色处理
- 用GDI+放大图片(DrawImage)时的“边界像素”问题
- 通过调节坐标进行jfree图的放大缩小
- 关于canvas无法通过drawImage加载的原因
- GDI+ DrawImage的应用
- DrawImage offset的问题
- canvas的drawImage()
- DrawImage()
- drawImage
- drawImage
- .NET 2.0 SP2开发和通过VS2012进行采用Framework 2.0不是完全相同的。
- gdiplus.h的引用
- 新的 GdiPlus
- GDI+ GDIPlus 的配置
- Gdiplus::Pen的使用
- Gdiplus的使用
- 使用DrawImage函数进行拉伸绘制时出现的过度边沿现象
- Yaroslav and Sequence - CodeForces 301A 水题
- 软件测试与质量控制
- 简介→_→
- burpsuite学习
- 探究计算机C语言编辑程序技巧
- Gdiplus的坑:通过DrawImage进行放大不是很靠谱
- Little Pony and Expected Maximum
- FFmpeg MP3解码器的研究与优化
- 数字心电管理系统的探讨与设计
- linux c des encrypt and decrypt
- 基于JAVA EE 平台的在线考试系统设计探究
- 嵌入式GUI系统EFL研究
- SNBI project materials
- 浅谈工作型PPT之提高篇