求教C#中超大图片处理方案

minwen369 2010-03-23 10:43:05
各位,我有个需求,将N个小图片拼接成一个超大图片(GB级的),一时想不到什么好的解决方法,请大家帮帮忙!
...全文
1355 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
b66173045 2010-09-02
  • 打赏
  • 举报
回复
有没有试过用GDAL
jiushi97 2010-08-09
  • 打赏
  • 举报
回复
Gdal如何计算有效数据的长和宽呢?
ygf2010cn 2010-06-03
  • 打赏
  • 举报
回复
学习下,一般在内存中处理图象可以处理多大的?
chenzt1015 2010-05-03
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 minwen369 的回复:]
引用 18 楼 cdglynn 的回复:
4~5M的图片加载到内存就有500M以上(跟图像质量有关),何况3~4G的图片,想一次性显示基本不可能。除非是图片可以放大、缩小或可以拖动。实际上google map 也不会直接把很大的图片都加载到web上。我的建议:
图片以碎片(小图片)的形式保存,并事先计算好小图在大图中的坐标,在“大图”显示时先计算出显示区域的图像对应的图片碎片,然后调取碎片显示……
[/Quote]

需要gis不 联系 32768021
gaogaogoo 2010-04-11
  • 打赏
  • 举报
回复
学习一下
healer_kx 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wuyq11 的回复:]

图片合并
private Bitmap MergerImg(Dictionary<string, Bitmap> bitMapDic)
{
Bitmap backgroudImg = new Bitmap(bitMapDic.Count * 12, 16);
Graphics g = Graphics.FromImage(backgroudImg);
g.Clear(System.……
[/Quote]

学习了。
wuyq11 2010-03-23
  • 打赏
  • 举报
回复
图片合并
private Bitmap MergerImg(Dictionary<string, Bitmap> bitMapDic)
{
Bitmap backgroudImg = new Bitmap(bitMapDic.Count * 12, 16);
Graphics g = Graphics.FromImage(backgroudImg);
g.Clear(System.Drawing.Color.White);
int j = 0;
foreach (KeyValuePair<string, Bitmap> entry in bitMapDic)
{
Bitmap map = entry.Value;
g.DrawImage(map, j * 11, 0, map.Width, map.Height);
j++;
}
g.Dispose();
return backgroudImg;
}
liyoubaidu 2010-03-23
  • 打赏
  • 举报
回复
我没叫你把整张大图也读到内存里去啊。
minwen369 2010-03-23
  • 打赏
  • 举报
回复
啊,在线等,等不到么。。。。
minwen369 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 liyoubaidu 的回复:]
根据图片的储存方式,把每张小图片的数据插入大图文件的某个位置。
[/Quote]
大图呢,放在哪?放内存里?这么大的容量。。。。。。
liyoubaidu 2010-03-23
  • 打赏
  • 举报
回复
根据图片的储存方式,把每张小图片的数据插入大图文件的某个位置。
minwen369 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lcl_data 的回复:]
引用 2 楼 minwen369 的回复:

不用Picturebox显示的,在特殊场合有用,无缝连接倒是真的。。。。但是那么多小图,然后拼接成一个超大的图片,肯定是不能在内存里面操作的。。。。

先局部拍图,然后对该图的碎片进行排序,而后直接读取排序的图?
[/Quote]

这样是可以的,在图片量比较少的时候,将要拼接的图按顺序命名,然后直接读取附,附加到新的大图上去。
十八道胡同 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 minwen369 的回复:]

不用Picturebox显示的,在特殊场合有用,无缝连接倒是真的。。。。但是那么多小图,然后拼接成一个超大的图片,肯定是不能在内存里面操作的。。。。
[/Quote]
先局部拍图,然后对该图的碎片进行排序,而后直接读取排序的图?
minwen369 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 benbenhuo 的回复:]
定义一个序列,可以按照图片名称 如1.gif、2.gif...等
然后按照某种排列算法拼凑起来
[/Quote]
这个方法我实现了,但是最终是要形成一个图片啊,这张图片总大小可能到3、4G,这种方法操作的话效率低,计算机也应付不了啊。
benbenhuo 2010-03-23
  • 打赏
  • 举报
回复
定义一个序列,可以按照图片名称 如1.gif、2.gif...等
然后按照某种排列算法拼凑起来
minwen369 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jelly_tracy 的回复:]
关注一下,拼成大图片 ??难道放到一个区域,利用picturebox??中间做到无缝连接?
[/Quote]
不用Picturebox显示的,在特殊场合有用,无缝连接倒是真的。。。。但是那么多小图,然后拼接成一个超大的图片,肯定是不能在内存里面操作的。。。。
Jelly_tracy 2010-03-23
  • 打赏
  • 举报
回复
关注一下,拼成大图片 ??难道放到一个区域,利用picturebox??中间做到无缝连接?
minwen369 2010-03-23
  • 打赏
  • 举报
回复
结贴了。。。。GDAL很强大。。。。
minwen369 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 xujiaoxiang 的回复:]
引用 17 楼 minwen369 的回复:
是这样的,我们把google map的地图瓦片全部下载下来了,准备拼成一张大图,然后按我们自己的投影系统和切图算法再切成小图。。。。。


拼成一张大图,不是真正的需求,是你们自己加进去的。而你们遇到的问题恰好出现在自己加的需求中。

那么变通一下。去掉拼成一张大图这个步骤,直接在google map的地图瓦片提取你们……
[/Quote]
。。。。。。。。,google map 小图我们已经有了,投影坐标不一样,没用,就比如google map 的中国地图是偏长,我们的优点类似压扁了。原有瓦片都没用的。
xujiaoxiang 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 minwen369 的回复:]
是这样的,我们把google map的地图瓦片全部下载下来了,准备拼成一张大图,然后按我们自己的投影系统和切图算法再切成小图。。。。。
[/Quote]

拼成一张大图,不是真正的需求,是你们自己加进去的。而你们遇到的问题恰好出现在自己加的需求中。

那么变通一下。去掉拼成一张大图这个步骤,直接在google map的地图瓦片提取你们需要的小图。

加载更多回复(9)

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧