解决ctx.DrawImage绘制的图像变大的问题

解决ctx.DrawImage绘制的图像变大的问题,第1张

解决ctx.DrawImage绘制的图像变大的问题

原因分析

DrawImage是设备相关的函数,换言之就是,DrawImage会把屏幕的参数带上,所以,它绘制图像的DPI基本都是96。而我的图片是72DPI的。例如,假定一个 Image 对象的宽度为 216 像素而存储的水平分辨率值为 72 点/英寸。因为 216 除以 72 等于 3,所以 DrawImage 将缩放该图像,使其在 96 点/英寸的分辨率下的宽度为 3 英寸。也就是说,DrawImage 将显示一个宽度为 96x3 = 288 像素的图像。

解决方案

1:ctx.DrawImage(image, 0, 0, image.Width, image.Height) //绘制时加上原图的宽度和高度

2: image.SetResolution(96, 96) //设置SetResolution,使其按96 点/英寸的分辨率显示

把图像等比例扩大或缩小尺寸步骤如下:

1、打开ai的软件,执行菜单栏中文件—新建,或者直接使用快捷键Ctrl+N新建一个画布。

2、选择工具箱中的心形工具,将填充设置为红色,描边设置为无

3、然后鼠标点击拖动不放,上下方向键控制角度的多少,我们画出一个的类似太阳的图形,如下图所示。选择我们来讲这个图形缩小或者是放大。

4、选择工具箱中的选择工具,选中这个图形,我们可以在四周看到一个方框,这个方框上每边都有三个锚点。如下图所示。

5、我们将鼠标放到锚点上,我们可以看到一个两个方向的箭头,直接点击向图形移动就是缩小,远离图形就是放大。

这个函数可以缩放,不能旋转。头四个数是画到什么地方,后四个数是画那幅图的哪个部分,也就是可以光画图的一半等等。

public void paint(Graphics g) {

Graphics2D g2 = (Graphics2D)g

AffineTransform at = new AffineTransform()

double angle = Math.PI

at.rotate(angle)

int transX = 100

int transY = 100

at.translate(transX, transY)

Image img = new BufferedImage()

g2.drawImage(img, at, null)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8173248.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存