| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1226 人关注过本帖
标题:求助,img显示图像限制问题?
只看楼主 加入收藏
cccool
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:268
专家分:555
注 册:2007-5-1
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
求助,img显示图像限制问题?
我用img装载显示图像时,为了让图像一目了然,我将尺寸太大图像按页面大小等比缩小,但现在出现一个问题就是当图像大小超过13M时加载的图像就不显示,但图像在,右击可以保存图像,是不是img显示图像有限制?哪位能帮忙解决一下!谢谢!
搜索更多相关主题的帖子: 图像 
2010-10-29 11:18
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:0 
对楼主的问题 很感兴趣 介意上传下代码研究一下吗?

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2010-10-29 15:55
cccool
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:268
专家分:555
注 册:2007-5-1
收藏
得分:0 
回复 2楼 wangnannan
程序代码:
<img alt="缩略图" id="Img1" src="" style="cursor: move;" onload="showImage()"/> 


 <script language="javascript" type="text/javascript">
        function showImage()
        {
            var Wmax=document.body.scrollWidth;
            var ImgD=document.getElementById("Img1");
            ImgD.src="<%=ScaleGrid_Load()%>";
            if(typeof(ImgD)== "object")
            {   //判断ImgD装载过后是否为对象,防止异常操作
                var   widthL=0;
                var   heightL=0;
                var   W=ImgD.width;
                var   H=ImgD.height;
                if(W>Wmax)
                {
                    widthL=Wmax;
                    heightL=(H+20)/((W+20)/Wmax); //+20是因为IE方式的默认边距
                }
                else
                {
                    return ;
                }
                if(widthL!=0&&heightL!=0)
                {
                    ImgD.style.width=widthL+"px";
                    ImgD.style.height=heightL+"px";
                }
                else
                {
                    setTimeout( "showImage()", 100);   //   判断图片是否装载完成,只有在装载完成后才能取到宽高值
                }
            }
            else
            {
                return; //alert( "系统错误 ");
            }
        }
</script>
用上面的方法可以实现图像比较小的图像显示,但超过了13M就不显示了!!
并且显示效果也不理想,比较卡!!
你有什么好点的方法来实现图像的缩略图快速显示吗?还望赐教!!


[ 本帖最后由 cccool 于 2010-10-29 17:47 编辑 ]

[fly]让心情飞一会[/fly]
">Email to Me     
2010-10-29 17:41
cccool
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:268
专家分:555
注 册:2007-5-1
收藏
得分:0 
来人解惑啊!!

[fly]让心情飞一会[/fly]
">Email to Me     
2010-10-29 22:16
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:20 
ScaleGrid_Load()代码能否贴出来?
恩 现有其他解决办法如下
程序代码:
现在有几种方法实现
1> Image imge = Image.FromFile(file.FullName);
  this.imageList1.Images.Add(imge.GetThumbnailImage(32,32,null,IntPtr.Zero))
  item.ImageIndex = this.imageList1.Images.Count - 1;
2>public Image MakeThumbnail(string originalImagePath, int width, int height, string mode)
  {
  System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);

  int towidth = width;
  int toheight = height;

  int x = 0;
  int y = 0;
  int ow = originalImage.Width;
  int oh = originalImage.Height;

  switch (mode)
  {
  case "HW"://指定高宽缩放(可能变形)  
  break;
  case "W"://指定宽,高按比例  
  toheight = originalImage.Height * width / originalImage.Width;
  break;
  case "H"://指定高,宽按比例
  towidth = originalImage.Width * height / originalImage.Height;
  break;
  case "Cut"://指定高宽裁减(不变形)  
  if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
  {
  oh = originalImage.Height;
  ow = originalImage.Height * towidth / toheight;
  y = 0;
  x = (originalImage.Width - ow) / 2;
  }
  else
  {
  ow = originalImage.Width;
  oh = originalImage.Width * height / towidth;
  x = 0;
  y = (originalImage.Height - oh) / 2;
  }
  break;
  default:
  break;
  }

  //新建一个bmp图片
  System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);

  //新建一个画板
  System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);

  //设置高质量插值法
  g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

  //设置高质量,低速度呈现平滑程度
  g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

  //清空画布并以透明背景色填充
  g.Clear(System.Drawing.Color.Transparent);

  //在指定位置并且按指定大小绘制原图片的指定部分
  g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight),
  new System.Drawing.Rectangle(x, y, ow, oh),
  System.Drawing.GraphicsUnit.Pixel);

  try
  {
  return (Image)bitmap.Clone();
  }
  catch (System.Exception e)
  {
  throw e;
  }
  finally
  {
  originalImage.Dispose();
  bitmap.Dispose();
  g.Dispose();
  }
  }
3> [DllImport("gdi32.dll", EntryPoint = "FindWindow")]
  private static extern GpStatus GdiplusStartup(long token, string lpWindowName, GdiplusStartupInput inputbuf, ref long outputbuf);


  [DllImport("gdi32.dll", EntryPoint = "FindWindow")]
  private static extern GpStatus GdiplusShutdown(long token);

  [DllImport("gdi32.dll", EntryPoint = "FindWindow")]
  private static extern GpStatus GdipDrawImageRect(long graphics, long image, int X, int Y, int Width, int Height);



  [DllImport("gdi32.dll", EntryPoint = "FindWindow")]
  private static extern GpStatus GdipCreateFromHDC(long hDC, long graphics);

  [DllImport("gdi32.dll", EntryPoint = "FindWindow")]
  private static extern GpStatus GdipDeleteGraphics(long graphics);


  [DllImport("gdi32.dll", EntryPoint = "FindWindow")]
  private static extern GpStatus GdipLoadImageFromFile(string filename, long image);

  [DllImport("gdi32.dll", EntryPoint = "FindWindow")]

另外缩略图水印组件wsImage3.5 也不错
例如
程序代码:
 1、在aspx文件加上aspcompat=true
<%@ Page language="c#" Codebehind="AddProduct.aspx.cs" AutoEventWireup="false" Inherits="Techsun.XYD.AdminOfXYD.AddProduct" aspcompat=true%>
2、在vs里引用com组件wsImage.dll
3、生成缩略图
wsImage.Resize obj = (wsImage.Resize)Server.CreateObject("wsImage.Resize");

string FilePath = Server.MapPath("25.jpg");
string strOutputPic = Server.MapPath("25_s.jpg");
int w = 125;
int h = 125;
int lngType = 0;

obj.LoadSoucePic(FilePath);
obj.Quality = 100;
obj.OutputSpic(strOutputPic,w,h,lngType);
obj.Free();

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2010-10-30 08:21
jianghong_02
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:143
专家分:476
注 册:2010-10-2
收藏
得分:0 
老大你用的是C#写的,人家能懂吗?
2010-10-30 09:17
cccool
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:268
专家分:555
注 册:2007-5-1
收藏
得分:0 
回复 5楼 wangnannan
谢谢你的解答!
ScaleGrid_Load()只是又后台返回加载图片的路径,没什么代码。
我现在也是用的第二种方法生成缩略图,然后显示时ScaleGrid_Load()返回缩略图的路径,能有达到不错的效果。
但现在又出了个新问题:
       用方法二生成缩略图时,当原始图像很大时会提示内存不足,查询了一下,网上说一般不会出现内存不足的问题,肯定是程序有问题,可能导致了内存泄露。
图片附件: 游客没有浏览图片的权限,请 登录注册


你再帮忙看看问题出在哪?有什么办法能解决,再次感谢!

[fly]让心情飞一会[/fly]
">Email to Me     
2010-10-31 11:24
wangnannan
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:87
帖 子:2546
专家分:9359
注 册:2007-11-3
收藏
得分:0 
OutOfMemoryException 异常 个人认为有三种情况
1)是不是图像格式不正确?
2)打开了不是图像的文件而引发的异常
3)如果 GDI+ 不支持文件的像素格式,则此方法将引发 OutOfMemoryException 异常
个人理解 会不会是.Net 2.0环境对内存管理造成的,因为当回收内存的时候,就一切正常了,当内存到达一个相对峰值时,应用程序对单个对象占用内存的大小就有限制了呢。会不会这个图片在小一点点就没有问题了。

出来混,谁不都要拼命的嘛。 。拼不赢?那就看谁倒霉了。 。有机会也要看谁下手快,快的就能赢,慢。 。狗屎你都抢不到。 。还说什么拼命?
2010-10-31 11:36
cccool
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:268
专家分:555
注 册:2007-5-1
收藏
得分:0 
回复 8楼 wangnannan
楼主很厉害!
我查了一下也就这几个原因
但是我的原始图像是以二进制方式存储在SQL数据库中的,存储时记录了图像的格式的。
所以1,2两种情况不会发生。
但3的情况我不是很理解,你能详细介绍下吗?有没有可能是3的情况导致的,
还有就是我在vs下调试刚开始一段时间还行,没出这种错误,当我发布后就出现这种错误了,然后再回到vs下调试也出现这种错误,很是纳闷!
以后要向你学习,多多请教了!


[fly]让心情飞一会[/fly]
">Email to Me     
2010-10-31 11:53
快速回复:求助,img显示图像限制问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038975 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved