Beispiel #1
0
        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;
                    }
            }
        }
Beispiel #2
0
 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();
     }
 }