c# 画图(生成缩略图失真问题)
现在画人员的工作牌。要把相片画在工作牌图片上给定的区域里
代码如下:
int x = 170; //工作牌图片上给定区域的宽
int y = 128; //工作牌图片上给定区域的高
//生成缩略图
newimg = img.GetThumbnailImage(x, y, null, new System.IntPtr(0));
//将缩略图画到工作牌图片上
g.DrawImage(newimg, new Rectangle(199, 103 + (240 * ii), newimg Width, newimg.Height));
高人们进来指点下哦,谢谢了
------解决方案--------------------newimg = new Bitmap(img,new size(x,y));
------解决方案--------------------g.DrawImage(newimg, new Rectangle(199, 103 + (240 * ii), newimg Width, newimg.Height));
应该改成图片的真实大小,newimg.Height newimg.Width 这个应该在程序外面就可以知道的
------解决方案--------------------static float iTop = 128;//y值
static float iLeft = 170;//x值
static float iWidth = 200;//图片宽
static float iHeight = 200;//图片高
private void DrawImage(Image img)
{
float xScale = img.Width/iWidth;//计算x轴缩放
float yScale = img.Height/iHeight;//计算y轴缩放
float Scale = xScale > yScale ? xScale : yScale;//取最大的缩放值
float leftPadding = (iWidth - img.Width / Scale)/2;//x轴偏移量
float topPadding = (iHeight - img.Height / Scale) / 2;//y轴偏移量
using (Graphics g = Graphics.FromHwnd(this.Handle))
{
g.DrawRectangle(new Pen(Color.Black), new Rectangle((int)iLeft-1,(int) iTop-1, (int)iWidth+1,(int) iHeight+1));//画边框
g.DrawImage(img, iLeft+leftPadding, iTop+topPadding, img.Width / Scale, img.Height / Scale);//根据偏移量和缩放绘制图片
}
}
------解决方案--------------------Mark
------解决方案--------------------返回image?为什么要返回image?就是缩放而不绘制吗?
new一个根据Scale获取的image,把旧的image绘制到新image上,返回就可以了