public void Save(Stream stream, uint languageId, CursorSaveFormat format) { switch (format) { case CursorSaveFormat.Raw: Save(stream, languageId); break; case CursorSaveFormat.Icon: { using (Icon icon = ToIcon(languageId)) { icon.Save(stream); } break; } case CursorSaveFormat.Bitmap: { using (Bitmap bitmap = ToBitmap(languageId)) { bitmap.Save(stream, ImageFormat.Bmp); } break; } case CursorSaveFormat.PNG: { Tuple<ushort, ushort, ushort, ushort, byte, byte[], bool> tuple = Load(languageId); if (!tuple.Item7) { using (Bitmap bitmap = ToBitmap(languageId)) { bitmap.Save(stream, ImageFormat.Png); } } else { stream.Write(tuple.Item6, 0, tuple.Item6.Length); } break; } case CursorSaveFormat.Cursor: default: { Tuple<ushort, ushort, ushort, ushort, byte, byte[], bool> tuple = Load(languageId); MemoryStream mem = new MemoryStream(tuple.Item6); using (mem) { BITMAPINFOHEADER header = Utils.Read<BITMAPINFOHEADER>(mem); Utils.Write(Convert.ToUInt16(0), stream); Utils.Write(Convert.ToUInt16(2), stream); Utils.Write(Convert.ToUInt16(1), stream); Utils.Write(Convert.ToByte(header.biWidth), stream); Utils.Write(Convert.ToByte(header.biHeight), stream); Utils.Write(Convert.ToByte(0), stream); Utils.Write(Convert.ToByte(0), stream); Utils.Write(tuple.Item1, stream); Utils.Write(tuple.Item2, stream); Utils.Write(tuple.Item6.Length, stream); Utils.Write(22, stream); Utils.Write(tuple.Item6, stream); } break; } } }
public void Save(string fileName, uint languageId, CursorSaveFormat format) { using (FileStream file = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None)) { Save(file, languageId, format); file.Flush(); } }