VS2005 Web工程模版ClubSite中相册薄的一处BUG?

  如果你正在学习VS2005的过程中,附带的模版Personal Web Site以及ClubSite无疑是最好的入门范例,虽然说不上是多么的复杂和经典,但VS2005的许多新特性都可以从中体会和借鉴。

  我和大多数园子里的朋友们一样,在第一时间开始各Starter Kit之旅 emclock.gif,对于VS2005的强大甚是赞叹!呵呵呵。。。

  啰嗦开场,始入正题:

  不知你是否注意到,在ClubSite的的首页,还有Album中,无论原始的图片尺寸是多大,缩略图显示的都是一个尺寸(69*69),这样导致很多图片发生变形!对于我来说(有些唯美)是不可接受的,特别是把自己MM的图片张贴上去时,更是难受 cry_smile.gif

  第一反应是CSS设置或Html标记有问题,一路检索发现在显示图片的地方仅是:<asp:Image ID="Image1" runat="server"  CssClass="photo" BorderWidth="1" />(ImageThumbnail.ascx文件中)这样一行!并未涉及长宽,追踪 CssClass类photo,也未提供长宽!?

  这才发现问题没有预想简单。。。(之前的想法一直都以为是在取出图片数据呈现时设置不当!)。


  继续检索,才发现这个问题是在图片数据入库时(upload)发生的:

代码如下:

 1 None.gif      public   static   byte [] MakeThumb( byte [] fullsize,  int  newwidth,  int  newheight)
 2 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
 3InBlock.gif        Image iOriginal, iThumb;
 4InBlock.gif        double scaleH, scaleW;
 5InBlock.gif
 6InBlock.gif        Rectangle srcRect=new Rectangle();
 7InBlock.gif        iOriginal = Image.FromStream(new MemoryStream(fullsize));
 8InBlock.gif        scaleH = iOriginal.Height / newheight;
 9InBlock.gif        scaleW = iOriginal.Width / newwidth;
10InBlock.gif        if (scaleH == scaleW)
11ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
12InBlock.gif            srcRect.Width = iOriginal.Width;
13InBlock.gif            srcRect.Height = iOriginal.Height;
14InBlock.gif            srcRect.X = 0;
15InBlock.gif            srcRect.Y = 0;
16ExpandedSubBlockEnd.gif        }

17InBlock.gif        else if ((scaleH) > (scaleW))
18ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
19InBlock.gif            srcRect.Width = iOriginal.Width;
20InBlock.gif            srcRect.Height = Convert.ToInt32(newheight * scaleW);
21InBlock.gif            srcRect.X = 0;
22InBlock.gif            srcRect.Y = Convert.ToInt32((iOriginal.Height - srcRect.Height) / 2);
23ExpandedSubBlockEnd.gif        }

24InBlock.gif        else
25ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
26InBlock.gif            srcRect.Width = Convert.ToInt32(newwidth * scaleH);
27InBlock.gif            srcRect.Height = iOriginal.Height;
28InBlock.gif            srcRect.X = Convert.ToInt32((iOriginal.Width - srcRect.Width) / 2);
29InBlock.gif            srcRect.Y = 0;
30ExpandedSubBlockEnd.gif        }

31InBlock.gif        iThumb = new Bitmap(newwidth, newheight);
32InBlock.gif        Graphics g = Graphics.FromImage(iThumb);
33InBlock.gif        g.DrawImage(iOriginal, new Rectangle(00, newwidth, newheight), srcRect, GraphicsUnit.Pixel);
34InBlock.gif        MemoryStream m = new MemoryStream();
35InBlock.gif        iThumb.Save(m, System.Drawing.Imaging.ImageFormat.Jpeg);
36InBlock.gif        return m.GetBuffer();
37ExpandedBlockEnd.gif    }

38 None.gif


具体代码就不一一繁述:):

贴出我的修改,应该有更好的设计,希望提出好的方案:

 1 None.gif      public   static   byte [] MakeThumb2( byte [] fullsize,  int  newwidth,  int  newheight)
 2 ExpandedBlockStart.gifContractedBlock.gif     dot.gif {
 3InBlock.gif        int originalWidth;
 4InBlock.gif        int originalHeight;
 5InBlock.gif
 6InBlock.gif        int thumbWidth;
 7InBlock.gif        int thumbHeight;
 8InBlock.gif
 9InBlock.gif        using (MemoryStream tempStream = new MemoryStream(fullsize))
10ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
11InBlock.gif            Bitmap tempBitmap = new Bitmap(tempStream);
12InBlock.gif
13InBlock.gif            originalWidth = tempBitmap.Width;
14InBlock.gif            originalHeight = tempBitmap.Height;
15ExpandedSubBlockEnd.gif        }

16InBlock.gif
17InBlock.gif
18InBlock.gif        double scaleH, scaleW;
19InBlock.gif
20InBlock.gif        scaleH = originalHeight / newheight;
21InBlock.gif        scaleW = originalWidth / newwidth;
22InBlock.gif
23InBlock.gif        if (scaleH == scaleW)
24ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
25InBlock.gif            thumbWidth = newwidth;
26InBlock.gif            thumbHeight = newheight;
27ExpandedSubBlockEnd.gif        }

28InBlock.gif        else if ((scaleH) > (scaleW))
29ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
30InBlock.gif            thumbWidth = newwidth;
31InBlock.gif            thumbHeight = Convert.ToInt32(originalHeight * newwidth / originalWidth);
32ExpandedSubBlockEnd.gif        }

33InBlock.gif        else
34ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
35InBlock.gif            thumbWidth = Convert.ToInt32(originalWidth * newheight / originalHeight);
36InBlock.gif            thumbHeight = newheight;
37ExpandedSubBlockEnd.gif        }

38InBlock.gif
39InBlock.gif        Bitmap  iThumb = new Bitmap( thumbWidth , thumbHeight);
40InBlock.gif        Graphics g = Graphics.FromImage(iThumb);
41InBlock.gif        g.DrawImage( Image.FromStream(new MemoryStream( fullsize )) , new Rectangle(00, thumbWidth, thumbHeight));
42InBlock.gif        MemoryStream m = new MemoryStream();
43InBlock.gif        iThumb.Save(m, System.Drawing.Imaging.ImageFormat.Jpeg);
44InBlock.gif        return m.GetBuffer();
45ExpandedBlockEnd.gif    }

这段代码是对

    public enum ImageSizes
    {
        Large = 0,
        Thumb = 1,
        FullSize = 2
    }

取值为 1 (即缩略图模式) 时的图像处理过程,还有另外两种模式,就由你来完善吧 emhot.gif


转载于:https://www.cnblogs.com/Luna/archive/2005/11/15/277214.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值