永发信息网

vb.net拉伸图像问题

答案:2  悬赏:60  手机版
解决时间 2021-06-02 17:31
  • 提问者网友:回忆在搜索
  • 2021-06-01 18:29
Dim a As New Bitmap(500, 39)
  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就没有想象空间,它知道第一条像素的末尾依然是在文件中的红色.没有渐变的余地了..

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯