使用平移流式处理大图像;缩放&;注释

本文关键字:图像 缩放 注释 amp 处理 | 更新日期: 2023-09-27 18:29:08

我有一个500MB大小的大图像,我想在ASP.net中显示这个具有缩放和平移功能的类似图像的地图。我为此找到了OpenLayers,但任何人都可以使用任何框架/库共享任何工作示例,以在ASP.net 中实现此功能

使用平移流式处理大图像;缩放&;注释

我找到了一个答案,我想与您分享。这是代码

private static void Split(string fileName, int width, int height)
{
    using (Bitmap source = new Bitmap(fileName))
    {
        bool perfectWidth = source.Width % width == 0;
        bool perfectHeight = source.Height % height == 0;
        int lastWidth = width;
        if (!perfectWidth)
        {
            lastWidth = source.Width - ((source.Width / width) * width);
        }
        int lastHeight = height;
        if (!perfectHeight)
        {
            lastHeight = source.Height - ((source.Height / height) * height);
        }
        int widthPartsCount = source.Width / width + (perfectWidth ? 0 : 1);
        int heightPartsCount = source.Height / height + (perfectHeight ? 0 : 1);
        for (int i = 0; i < widthPartsCount; i++)
            for (int j = 0; j < heightPartsCount; j++)
            {
                int tileWidth = i == widthPartsCount - 1 ? lastWidth : width;
                int tileHeight = j == heightPartsCount - 1 ? lastHeight : height;
                using (Bitmap tile = new Bitmap(tileWidth, tileHeight))
                {
                    using (Graphics g = Graphics.FromImage(tile))
                    {
                        g.DrawImage(source, new Rectangle(0, 0, tile.Width, tile.Height), new Rectangle(i * width, j * height, tile.Width, tile.Height), GraphicsUnit.Pixel);
                    }
                    tile.Save(string.Format("{0}-{1}.png", i + 1, j + 1), ImageFormat.Png);
                }
            }
    }
}

我建议制作一些较小的图像(Mipmappinghttp://en.wikipedia.org/wiki/Mipmap)或/并将它们切成更小的部分。(将图像切片)

想想看,你不可能看到500兆字节数据的所有像素。只传输您实际看到的内容。