vb.net拉伸图像问题
- 提问者网友:回忆在搜索
- 2021-06-01 18:29
Dim b As Graphics = Graphics.FromImage(a)
b.DrawImage(Image.FromFile("C:\Users\Jack\Desktop\5.png"), New Rectangle(0, 0, 500, 39))
Me.BackgroundImage=a
原图是一张1x39的图,我把他拉伸成500宽就出问题了,怎么成渐变了?原图:拉伸后:
- 五星知识达人网友:行路难
- 2021-06-01 19:12
直接拉会出现这种问题的.
应该重复绘
Dim a As New Bitmap(500, 39)
Dim b As Graphics = Graphics.FromImage(a)
Dim I As Integer
For I = 0 To 500
b.DrawImage(Image.FromFile("C:\1.jpg"), New Rectangle(I, 0, 1, 39))
Next
Me.BackgroundImage = a
- 1楼网友:迟山
- 2021-06-01 20:00
Good question!刚控制变量试了好几次.都出现了这种情况.
最后发现.把图片文件做成2*39(复制多一条像素)
再把
b.DrawImage(Image.FromFile("C:\Users\Jack\Desktop\5.png"), New Rectangle(0, 0, 500, 39))
改为
b.DrawImage(Image.FromFile("C:\Users\Jack\Desktop\5.png"), New Rectangle(0, 0, 500, 39), New Rectangle(0, 0, 1, 39), GraphicsUnit.Pixel)
也就是把.图片文件上有两竖条像素,但把取图区域限定在第1条像素上.
画出来的图就不会渐变了..
因此.大致原因是.
过小的图形进行放大时.VB.NET会对像素进行调整.来显示出放大的效果..(把造成事故的主语简单地说成是VB.NET吧..应该说是JIT编译器什么的..)
调整中.包括通过对两两像素进行计算.得出接近的像素值.防止出现严重的矩形效果.(非矢量图形)
因为这个图形实在过小.宽度只有一像素.VB.NET取了第一条像素和后一条并不存在的像素.空白像素.是白色的.
放大之后.就会呈红与白的渐变效果..
而当拿两条像素的文件取第一条像素来拉伸..
VB.NET就没有想象空间,它知道第一条像素的末尾依然是在文件中的红色.没有渐变的余地了..