日期:2014-05-19  浏览次数:20844 次

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上,返回就可以了