zoukankan      html  css  js  c++  java
  • VS2005 Web工程模版ClubSite中相册薄的一处BUG?

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

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

      啰嗦开场,始入正题:

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

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

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


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

    代码如下:

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

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

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

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

    38


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

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

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

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

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

    33        else
    34        {
    35            thumbWidth = Convert.ToInt32(originalWidth * newheight / originalHeight);
    36            thumbHeight = newheight;
    37        }

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

    这段代码是对

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

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


  • 相关阅读:
    Windows Phone 7 立体旋转动画的实现
    jQuery 表格Table插件汇总
    SNS社交类网站照片头像裁剪源码
    VS无法启动调试
    SQL Server中获取第一天、最后一天
    jQuery技巧总结
    IT人士应当知道的10个行业小内幕
    巧用SQL server临时表
    将Html文档整理为规范XML文档
    16个Javascript的Web UI库、框架及工具包
  • 原文地址:https://www.cnblogs.com/Luna/p/277214.html
Copyright © 2011-2022 走看看