public SaveToStream ( |
||
image | The image to save. | |
writer | The System.IO.BinaryWriter to use. | |
Результат | void |
public void SaveToStream(Bitmap image, BinaryWriter writer)
{
_data = image.LockBits(_rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
unsafe
{
byte* ptr = (byte*)_data.Scan0;
for (int i = 0; i < _size; ++i)
{
writer.Write(*(ptr + 2));
writer.Write(*(ptr + 1));
writer.Write(*(ptr));
writer.Write(*(ptr + 3));
ptr += 4;
}
}
image.UnlockBits(_data);
}
/// <summary> /// Savbes the tileset to a separate file. /// </summary> /// <param name="filename">The filename to save to.</param> public void Save(string filename) { using (BinaryWriter writer = new BinaryWriter(File.OpenWrite(filename))) { // save header data: writer.Write(".rts".ToCharArray()); writer.Write(_version); writer.Write((short)Tiles.Count); writer.Write(TileWidth); writer.Write(TileHeight); writer.Write((short)32); writer.Write(_compression); foreach (Tile t in Tiles) if (t.Obstructions.Count > 0) _hasObstruct = 1; writer.Write(_hasObstruct); writer.Write(new byte[240]); // save tile pixels: BitmapSaver saver = new BitmapSaver(TileWidth, TileHeight); foreach (Tile tile in Tiles) saver.SaveToStream(tile.Graphic, writer); // save tile info: foreach (Tile t in Tiles) { writer.Write(new byte()); writer.Write(t.Animated); writer.Write(t.NextAnim); writer.Write(t.Delay); writer.Write(new byte()); writer.Write((byte)2); writer.Write((short)t.Obstructions.Count); writer.Write((short)t.Name.Length); writer.Write(new byte[20]); writer.Write(t.Name.ToCharArray()); foreach (Line l in t.Obstructions) { writer.Write(l.X1); writer.Write(l.Y1); writer.Write(l.X2); writer.Write(l.Y2); } } writer.Flush(); } }