`

GDI+ drawImage使用注意

 
阅读更多

在绘制图像时,GDI+ 可能会自动缩放图像,这将会导致性能降低。另外,也可以通过将目标矩形的尺寸传递给 DrawImage 方法来控制图像的缩放。

例如,以下对 DrawImage 方法的调用指定左上角的位置为 (50, 30),但是未指定目标矩形。

 
e.Graphics.DrawImage(image, 50, 30) ' upper-left corner at (50, 30)


尽管从所需参数的数量上来说,这是 DrawImage 方法最方便的版本,但它不一定是最有效的。如果 GDI+ 使用的分辨率(通常是 96 点/英寸)与 Image 对象中存储的分辨率不同,则 DrawImage 方法将缩放图像。例如,假定一个 Image 对象的宽度为 216 像素而存储的水平分辨率值为 72 点/英寸。因为 216 除以 72 等于 3,所以 DrawImage 将缩放该图像,使其在 96 点/英寸的分辨率下的宽度为 3 英寸。也就是说,DrawImage 将显示一个宽度为 96x3 = 288 像素的图像。

即使您的屏幕分辨率不是 96 点/英寸,GDI+ 也可能会像屏幕分辨率是 96 点/英寸那样缩放图像。这是因为 GDI+Graphics 对象是与设备上下文关联的,当 GDI+ 查询设备上下文以获取屏幕分辨率时,不管实际屏幕分辨率是多少,结果通常都是 96。通过在 DrawImage 方法中指定目标矩形,可以避免自动缩放图像。

示例

下面的示例将相同的图像绘制两次。在第一个例子中,未指定目标矩形的宽度和高度,图像被自动缩放。在第二个例子中,目标矩形的宽度和高度(单位是像素)被指定为与原始图像的宽度和高度相同。下面的插图显示两次呈现的图像。

经缩放的纹理
 
Dim image As New Bitmap("Texture.jpg")

e.Graphics.DrawImage(image, 10, 10)
e.Graphics.DrawImage(image, 120, 10, image.Width, image.Height)
分享到:
评论

相关推荐

    GDI+介绍和GDI+的MFC编程

    7. **错误处理**:GDI+使用异常处理机制报告错误,因此需要在可能出现错误的地方包裹在`try-catch`块中。 通过以上步骤,开发者可以在MFC项目中充分利用GDI+的强大功能,创建出丰富且美观的图形界面。需要注意的是...

    GDI+中发生一般性错误

    在描述中多次提到“GDI+中发生一般性错误”,这种错误通常指的是在使用GDI+进行绘图或图像处理时出现的问题。这类错误可能由多种因素引起,比如资源管理不当、对象释放不及时、内存泄漏等。 #### 常见问题及解决...

    VC6使用GDI+

    在Microsoft Visual C++ 6.0(简称VC6)这个经典的开发环境中,使用GDI+进行图形绘制和处理是一项常见的任务。GDI+是Windows API的一个扩展,它提供了丰富的图形功能,包括2D图形绘制、图像操作、文本渲染等。在本文...

    delphi基于gdi+的图片旋转任意角度

    在GDI+中,可以使用Graphics对象的DrawImage方法,配合Matrix对象来实现旋转。首先创建一个Matrix对象,设置其旋转参数,然后将该Matrix应用到Graphics对象上,最后调用DrawImage来绘制旋转后的图像。 4. **内存...

    在Delphi XE10.2版本可用的GDI+库

    `,然后使用`Graphics.DrawImage(Image, DestRect)`。 4. **高级特性**: - **路径绘图**:可以创建复杂的图形路径,通过Path对象的AddLine、AddArc等方法组合不同的形状。 - **变换**:支持缩放、旋转、平移等...

    窗口显示透明png图片(或用GDI+)

    本文将深入探讨如何使用GDI+库在Windows窗口中实现这一功能,同时提供VC++代码示例来帮助理解。 首先,我们要了解PNG图片的透明性是如何实现的。PNG图像格式支持两种透明类型:索引透明(也称为“色调键透明”)和...

    VC6.0中用GDI+加载动态gif图片示例

    注意,由于GDI+的特性,动态GIF的播放是自动的,无需额外处理帧序列。 然而,如果想要实现更复杂的控制,如暂停、播放或调整速度,你需要访问GIF的帧信息。GDI+的`Image`类提供了一个`FrameDimensionsCount`属性,...

    MFC GDI+缩放图片示例

    在这个“MFC GDI+缩放图片示例”中,我们将探讨如何使用MFC与GDI+结合来动态地调整图像的大小,即缩放图片。首先,你需要包含必要的头文件,如`<afxwin.h>`、`<gdiplus.h>`,并确保链接到`gdiplus.lib`库。 在MFC...

    GDI+图片的放大与缩小

    注意,`Dispose()`方法用于释放不再使用的资源,以避免内存泄漏。 为了实现任意比例的放大与缩小,我们可以添加用户界面元素如滑块或输入框,让用户输入缩放比例。然后根据输入的比例动态调整`DrawImage()`方法中的...

    GDI+多张图片合为一张图片

    本文将详细介绍如何使用GDI+(Graphics Device Interface Plus)这一图形处理库来实现多张图片横向或纵向排列并整合成一张图片的功能。 #### GDI+简介 GDI+是Microsoft推出的一种用于Windows平台的绘图API,它提供...

    vc_GDI+显示PNG图片

    需要注意的是,在使用GDI+显示PNG图片时,务必确保已正确配置好SDK及相关头文件的路径,这样才能顺利地加载和显示PNG格式的图片。此外,还需注意保持GDI+的初始化与卸载操作,以避免内存泄漏等问题。

    C#下GDI+程序设计实例源码

    你可以看到如何使用`Image`类加载图片,然后使用`DrawImage`方法将图片绘制到画布上。此外,还可以进行裁剪、缩放、旋转和翻转等操作。对于颜色处理,GDI+支持alpha通道,可以实现透明度控制。 在文本渲染部分,GDI...

    gdi+实现截屏保存png文件,鼠标钩子,直接截图

    在本文中,我们将深入探讨如何使用GDI+技术来实现屏幕截图,并将其保存为PNG文件。GDI+(Graphics Device Interface Plus)是Windows API的一部分,它提供了丰富的图形绘制功能,包括图像处理、文本渲染和几何形状...

    GDI+绘制GIF图标

    请注意,GDI+并不直接支持GIF的动画播放,你需要自己处理帧之间的延迟时间。可以通过读取GIF的控制扩展块来获取每帧的延迟时间,并结合定时器来实现动画循环。 这个项目中的"DrawGif"可能是源代码或示例项目的名称...

    GDI+扭曲图片源码.rar

    1. **矩阵变换**:GDI+使用一个3x3的矩阵来表示几何变换,包括缩放、旋转、倾斜、平移等。通过修改这个矩阵,我们可以实现对图像的任意扭曲效果。例如,我们可以创建一个非对角线的矩阵来实现透视扭曲,或者通过增加...

    GDI+类模块使用教程.rar

    在编程时,要注意释放资源,因为GDI+对象是托管资源,虽然系统会自动管理,但为了提高性能和避免内存泄漏,最好在使用完毕后立即释放,如使用`Dispose()`方法。 总的来说,GDI+为Windows应用程序开发提供了强大的...

    MFC GDI+ 显示GIF图片

    本篇文章将深入探讨如何在MFC应用中使用GDI+来显示GIF动态图片。 首先,为了在MFC应用中使用GDI+,我们需要包含必要的头文件并链接GDI+库。在C++源文件中,添加以下头文件引用: ```cpp #include using namespace...

    使用 GDI+ 显示 GIF 图像

    请注意,GDI+不直接支持GIF的动画播放,所以你需要手动控制帧的显示。`Sleep`函数用于在绘制下一帧之前添加延迟,模拟动画效果。实际项目中,你可能需要更精确的时间控制,这可能涉及到Windows消息队列和定时器。 ...

    Gdi+绘制窗口.rar

    但需要注意,虽然GDI+功能强大,但在现代编程中,Direct2D和DirectWrite等技术已经逐渐取代GDI+,它们提供了更好的性能和更现代的图形渲染能力。然而,对于学习图形绘制基础和理解Windows图形系统的工作原理,GDI+...

    gdi+图片缩放相关

    默认情况下,GDI+使用的是双线性插值算法,这是一种常见的平滑缩放方法,但也可以选择其他插值算法以达到不同的效果。 5. 性能优化 对于大量或频繁的缩放操作,可以考虑使用缓存技术,预先计算好不同尺寸的缩略图,...

Global site tag (gtag.js) - Google Analytics