转载:请教:c#中实现图像缩放?

转载自:http://topic.csdn.net/t/20060504/12/4729916.html

请教:c#中实现图像缩放?

楼主asweisun(烟薄荷) 2006-05-04 12:43:27 在 .NET技术 / .NET Framework 提问

功能:   在pictureBox中点击鼠标后,如何将pictureBox中图片放大,缩小,平移?  
  我对net的类库不是很了解,只查到graphic中的scaletransform函数,尝试过,没有成功。  
  不知道是否还有其它的函数可以 使用 ?还有能否给点实现的思路  
  谢谢 问题点数:100、回复次数:27Top

scrolling="no" frameborder="0" src="/Include/Board.htm?Tags=">

1 楼flygoldfish(长江支流)回复于 2006-05-04 12:57:22 得分 0

把pictureBox.Image读出来,  
  然后把它当作参数实例一个新的Image即可缩放,把这个新的image给pictureBox.Image即可Top

2 楼asweisun(烟薄荷)回复于 2006-05-04 13:59:45 得分 0

代码 是如下实现的吗?试了没有效果……  
    Image   magnifyimage   =   pictureBox1.Image;  
    Graphics   g   =   Graphics.FromImage(magnifyimage);  
    g.ScaleTransform(1,   2);  
    pictureBox1.Image   =   magnifyimage;Top

3 楼lishaowensdut(小李探花)回复于 2006-05-05 11:52:08 得分 0

顶,学习Top

4 楼dutguoyi(新鲜鱼排)回复于 2006-05-05 16:06:16 得分 0

是不是可以通过动态设置图片的大小来实现缩放。  
  Top

5 楼cugliang(雨帘)回复于 2006-05-05 19:32:25 得分 0

可以通过graphics这个类来实现的,  
  但是实现的过程可能你搞错了  
  Graphics   g   =   e.Graphics;  
  g.ScaleTransform(xScale,   yScale);  
  我曾经做过是成功的Top

6 楼asweisun(烟薄荷)回复于 2006-05-05 19:37:49 得分 0

这个图像是 程序 动态画出来的  
  功能类似acdsee。  
  我的想法是依据该image生成其graphics对象,通过graphics对象的ScaleTransform()函数来实现放大,缩小。  
  结果没有想象中的效果。Top

7 楼happyamei(啊梅)回复于 2006-05-07 15:40:21 得分 0

一定要通过pictureBox实现吗?  
  如果是webform可以通过javascript脚本实现,我有现成代码Top

8 楼webwait(webwei)回复于 2006-05-08 01:00:17 得分 0

markTop

9 楼duncansun(天下英雄舍我其谁)回复于 2006-05-08 10:14:38 得分 0

帮楼主顶一下Top

10 楼mygolddog(海鸥)回复于 2006-05-08 11:00:35 得分 0

楼主给个javascript的代码行吗我的邮箱mygolddog@sina.comTop

11 楼kokubo_wing(假装父母富裕是违法行为)回复于 2006-05-10 13:59:35 得分 0

帮顶一下Top

12 楼namhyuk(namhyuk)回复于 2006-05-11 06:40:48 得分 0

放大、缩小应该很容易吧。  
  新建一个 目标 大小的Bitmap对象,从这个对象里取得Graphics对象。再把原图写进这个新建Bitmap对象里。Top

13 楼calm_star(火烧云)回复于 2006-05-18 09:35:41 得分 0

如果是程序动态画出来的话就不能调用系统的缩小放大函数,不然放大的时候线条也会变得很粗的。  
  如果是整体放大   就得建一个更大的Bitmap对象然后在上面重新画图;如果是窗口大小不变 图形 部分被选取再放大的话,就按比例放大比例建一个大的Bitmap对象,并在上面画图,然后截取跟窗口一样大小的部分显示出来Top

14 楼airwaterland(波仔)回复于 2006-05-18 16:06:00 得分 0

你要不失真的话,就用我给你的解决方案。  
  以下是主要代码:  
  private   void   ComputeImageScale(int   srcWidth,int   srcHeight,ref   int   destWidth,ref   int   destHeight)  
  {  
  if(destWidth   ==   0   ||   destHeight   ==   0)  
  return;  
   
  try  
  {  
  double   scale   =   0;  
  if(srcWidth/destWidth   >   (scale   =   1.0*srcHeight/destHeight))  
  {  
  scale   =   1.0*srcWidth/destWidth;  
  destHeight   =   (int)(srcHeight/scale);  
  }  
  else  
  destWidth   =   (int)(srcWidth/scale);  
  }  
  catch{}  
   
  }  
   
  private   void   TestImgZoom()  
  {  
  string   filePath   =   "C://";  
  switch(this.cmbType.Text)  
  {  
  case   "BMP":  
  filePath   +=   "test.bmp";  
  break;  
  case   "JPG":  
  filePath   +=   "test.jpg";  
  break;  
  case   "GIF":  
  filePath   +=   "test.gif";  
  break;  
  }  
   
  try  
  {  
  Image   img   =   Image.FromFile(filePath);  
   
  int   destWidth   =   0;  
  int   destHeight   =   0;  
   
  if(this.radioLength.Checked)  
  {  
  destWidth   =   Convert.ToInt32(this.txtWidth.Text);  
  destHeight   =   Convert.ToInt32(this.txtHeight.Text);  
  }  
  else  
  {  
  destWidth   =   img.Width/Convert.ToInt32(this.numericUpDownWidth.Value);  
  destHeight   =   img.Height   /Convert.ToInt32(this.numericUpDownHeight.Value);  
  }  
   
  System.Drawing.Imaging.ImageFormat   format   =   img.RawFormat;  
   
  ComputeImageScale(img.Width,img.Height,ref   destWidth,ref   destHeight);  
  Bitmap   bmp   =   new   Bitmap(destWidth,destHeight,img.PixelFormat);  
  //Image   bmp   =   null;  
  Graphics   g   =   Graphics.FromImage(bmp);  
  g.SmoothingMode   =   System.Drawing.Drawing2D.SmoothingMode.HighQuality;  
   
  g.DrawImage(img,new   Rectangle(0,0,destWidth,destHeight),0,0,img.Width,img.Height,GraphicsUnit.Pixel);  
   
  this.pictureBox1.Image   =   bmp;  
  System.Drawing.ImageConverter   imgConvert   =   new   ImageConverter();  
   
  //System.IO.FileStream   stream   =   new   System.IO.FileStream("C:/test1.gif");  
  //System.Drawing.Imaging  
  //bmp.SaveAdd(bmp,  
  //bmp   =   (Bitmap)img.GetThumbnailImage(destWidth,destHeight,null,IntPtr.Zero);  
  //bmp.Save("C://1.gif",format);  
   
  }  
  catch(Exception   ex)  
  {  
  MessageBox.Show(ex.ToString());  
  }  
   
  }  
  Top

15 楼Muf(沐枫)回复于 2006-05-19 11:29:16 得分 0

TO:::::   asweisun(烟 薄荷 )   (   )   信誉:100    
   
  >代码是如下实现的吗?试了没有效果……  
  >   Image   magnifyimage   =   pictureBox1.Image;  
  >   Graphics   g   =   Graphics.FromImage(magnifyimage);  
  >   g.ScaleTransform(1,   2);  
  >   pictureBox1.Image   =   magnifyimage;  
   
  当然没效果,因为你什么事都没做。  
  你可以这样:  
    Image   magnifyimage   =   new   Bitmap(pictureBox1.Image.Width,   pictureBox1.Image.Height);  
    using(Graphics   g   =   Graphics.FromImage(magnifyimage))  
    {  
        g.ScaleTransform(1,   2);  
        g.DrawImage(pictureBox1.Image,   0,   0);  
    }  
    pictureBox1.Image   =   magnifyimage;  
   
   
  Top

16 楼goldanycom()回复于 2006-05-19 13:37:37 得分 0

技术 交流群号:23266021  
  欢迎大家在此讨论关于.net的各种技术。1号群  
  Top

17 楼liuqian0415(成功?我才刚上路哎!!!)回复于 2006-05-19 14:27:01 得分 0

zoominTop

18 楼xamcsdn2(知了)回复于 2006-05-23 17:19:04 得分 0

有个API   可以实现   StretchBlt/StretchDIBitsTop

19 楼Edifier0709(腦袋重構中.....)回复于 2006-05-25 14:39:37 得分 0

如果是WEB上  
   
                  function   ZoomImageSize(img)  
                  {  
  var   zoom   =   parseInt(img.style.zoom,10)||100;  
   
  zoom   +=   event.wheelDelta/12;  
   
  if   (zoom>0)   img.style.zoom   =   zoom   +   '%';  
  return   false;  
  }  
   
  <img   id="imgRoomMap"   name="imgRoomMap"   alt="您可以点击查看完整图片或滚动鼠标滚轮缩放图片"   onmousewheel='return   ZoomImageSize(this)'   οnclick="window.open(this.src)"     runat="server">  
   
  呵呵,这样是不是 简单 点?  
  Top

20 楼ilovejolly(有些伤感)回复于 2006-05-26 17:40:02 得分 0

markTop

21 楼greennetboy(我的老婆叫静静)回复于 2006-05-26 18:05:57 得分 0

System.Drawing.Image   img   =   System.Drawing.Image.FromStream(postFile.InputStream);//从上传文件中创建图像对象  
  System.Drawing.Image   newImg   =   img.GetThumbnailImage(155,height,null,new   IntPtr());//生成缩略图Top

22 楼roydux(后台运行中-http://www.LeadNT.org 大家一起来写吧)回复于 2006-05-26 23:49:15 得分 0

通过动态不行么Top

23 楼happydaytx()回复于 2006-05-29 11:37:51 得分 0

受益匪浅`~!Top

24 楼Sandy945(阿非)回复于 2006-05-29 22:18:47 得分 0

markTop

25 楼jeepzj(James)回复于 2006-05-31 20:18:31 得分 0

你用graphics下的DrawImage方法就可以实现了。  
  DrawImage里面有个定位置的参数。Top

26 楼Dluxd()回复于 2006-06-01 20:06:30 得分 0

markTop

27 楼liujiayu10(活着就好)回复于 2006-06-03 11:23:56 得分 0

客户端JS行不行?

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值