转载自:http://topic.csdn.net/t/20060504/12/4729916.html
请教:c#中实现图像缩放?
功能: 在pictureBox中点击鼠标后,如何将pictureBox中图片放大,缩小,平移?
我对net的类库不是很了解,只查到graphic中的scaletransform函数,尝试过,没有成功。
不知道是否还有其它的函数可以
使用
?还有能否给点实现的思路
谢谢 问题点数:100、回复次数:27Top
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行不行?