日期:2014-05-17  浏览次数:21196 次

C#如何实现图片分块延时显示
我要做一个winform程序,form上有一个picturebox可以显示图片,有滚动条可以上下滚动查看当前的图片,但图片太长(假设无限长),一次显示那么大的图片程序会报出异常,所以我想把图片分割成显示窗口那么大小的N多张小图片,每次只加载显示窗口内的图片和上下几张图片,其他的等滚轮滚动时再实时加载!想请教一下哪位大神有这样的实例或者给出一些简单的实现代码,谢啦!
------解决方案--------------------
假设以512x512的大小为一个“瓦片”,那么比如说,你可以在内存中先声明一个 List<Point> 来保存已经加载到Picture上的瓦片(用其左上角的坐标位置来对应到瓦片)。当捕获滚动事件时,根据滚动条位置以及窗口大小,你可以计算出当前窗口可见区域的四边范围,通过比较这个范围中所有的瓦片区域的每一个、是否在List<Rect>中,就可以判断“还需要加载哪一个区域的瓦片”。

例如已知的窗口的(滚动之后)的左上角是r(Point类型),可以写
for (var i = r.X; i <= lt.X + 窗口宽度; i += 512)
    for (var j = r.Y; j < r.Y + 窗口高度; j += 512)
    {
        var a= (i/512) * 512;  //当然你也可以采取移位操作
        var b= (j/512) * 512;
        if( !lst.Any(t=> t.X==a && t.Y==b))
        {
             加载瓦片(a,b);
             lst.Add(new Point(a,b));
        }
    }