OpenSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros
JPEG.cs
Go to the documentation of this file.
1 /*
2  * Copyright (c) Contributors, http://opensimulator.org/
3  * See CONTRIBUTORS.TXT for a full list of copyright holders.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  * * Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * * Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * * Neither the name of the OpenSimulator Project nor the
13  * names of its contributors may be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 using System;
29 using System.Drawing;
30 using System.Drawing.Imaging;
31 using System.IO;
32 using OpenSim.Region.Framework.Interfaces;
33 
34 namespace OpenSim.Region.CoreModules.World.Terrain.FileLoaders
35 {
36  public class JPEG : ITerrainLoader
37  {
38  #region ITerrainLoader Members
39 
40  public string FileExtension
41  {
42  get { return ".jpg"; }
43  }
44 
45  public ITerrainChannel LoadFile(string filename)
46  {
47  throw new NotImplementedException();
48  }
49 
50  public ITerrainChannel LoadFile(string filename, int x, int y, int fileWidth, int fileHeight, int w, int h)
51  {
52  throw new NotImplementedException();
53  }
54 
55  public ITerrainChannel LoadStream(Stream stream)
56  {
57  throw new NotImplementedException();
58  }
59 
60  public void SaveFile(string filename, ITerrainChannel map)
61  {
62  Bitmap colours = CreateBitmapFromMap(map);
63 
64  colours.Save(filename, ImageFormat.Jpeg);
65  }
66 
72  public void SaveStream(Stream stream, ITerrainChannel map)
73  {
74  Bitmap colours = CreateBitmapFromMap(map);
75 
76  colours.Save(stream, ImageFormat.Jpeg);
77  }
78 
79  public virtual void SaveFile(ITerrainChannel m_channel, string filename,
80  int offsetX, int offsetY,
81  int fileWidth, int fileHeight,
82  int regionSizeX, int regionSizeY)
83  {
84  throw new System.Exception("Not Implemented");
85  }
86 
87  #endregion
88 
89  public override string ToString()
90  {
91  return "JPEG";
92  }
93 
94  //Returns true if this extension is supported for terrain save-tile
95  public bool SupportsTileSave()
96  {
97  return false;
98  }
99 
100  private static Bitmap CreateBitmapFromMap(ITerrainChannel map)
101  {
102  int pallete;
103  Bitmap bmp;
104  Color[] colours;
105 
106  using (Bitmap gradientmapLd = new Bitmap("defaultstripe.png"))
107  {
108  pallete = gradientmapLd.Height;
109 
110  bmp = new Bitmap(map.Width, map.Height);
111  colours = new Color[pallete];
112 
113  for (int i = 0; i < pallete; i++)
114  {
115  colours[i] = gradientmapLd.GetPixel(0, i);
116  }
117  }
118 
119  for (int y = 0; y < map.Height; y++)
120  {
121  for (int x = 0; x < map.Width; x++)
122  {
123  // 512 is the largest possible height before colours clamp
124  int colorindex = (int) (Math.Max(Math.Min(1.0, map[x, y] / 512.0), 0.0) * (pallete - 1));
125  bmp.SetPixel(x, map.Height - y - 1, colours[colorindex]);
126  }
127  }
128  return bmp;
129  }
130  }
131 }
ITerrainChannel LoadStream(Stream stream)
Definition: JPEG.cs:55
void SaveFile(string filename, ITerrainChannel map)
Definition: JPEG.cs:60
void SaveStream(Stream stream, ITerrainChannel map)
Exports a stream using a System.Drawing exporter.
Definition: JPEG.cs:72
virtual void SaveFile(ITerrainChannel m_channel, string filename, int offsetX, int offsetY, int fileWidth, int fileHeight, int regionSizeX, int regionSizeY)
Save a number of map tiles to a single big image file.
Definition: JPEG.cs:79
ITerrainChannel LoadFile(string filename, int x, int y, int fileWidth, int fileHeight, int w, int h)
Definition: JPEG.cs:50
ITerrainChannel LoadFile(string filename)
Definition: JPEG.cs:45