1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
//------------------------------------------------------------------------------
// <copyright file="TemporaryBitmapFile.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
namespace System.Web.UI.Design.MobileControls.Util
{
using System;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
/// <summary>
/// This class encapsulates a bitmap and a file that represents
/// the bitmap on disk. It would have been cleaner to subclass
/// bitmap, but the bitmap class is sealed.
/// </summary>
[
System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand,
Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)
]
[Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")]
internal class TemporaryBitmapFile : IDisposable
{
private String _path;
private Bitmap _bitmap;
internal TemporaryBitmapFile(Bitmap bitmap)
{
Debug.Assert(bitmap != null,
"You must provide a valid bitmap object."
);
_bitmap = bitmap;
_path = Path.GetTempPath() + Guid.NewGuid().ToString() + ".bmp";
Sync();
}
public void Dispose()
{
if(_bitmap != null)
{
_bitmap.Dispose();
_bitmap = null;
}
if(_path != null)
{
FileAttributes fa = File.GetAttributes(_path);
File.SetAttributes(_path, fa & ~FileAttributes.ReadOnly);
File.Delete(_path);
_path = null;
}
}
private void Sync()
{
FileAttributes fa;
if(File.Exists(_path))
{
fa = File.GetAttributes(_path);
File.SetAttributes(_path, fa & ~FileAttributes.ReadOnly);
}
_bitmap.Save(_path, ImageFormat.Bmp);
// If the file did not exist previously, fa will not be valid.
fa = File.GetAttributes(_path);
File.SetAttributes(_path, fa | FileAttributes.ReadOnly);
}
internal String Url
{
get
{
return "file:///" + _path;
}
}
internal Bitmap UnderlyingBitmap
{
get
{
return _bitmap;
}
set
{
Debug.Assert(value != null,
"Do not set UnderlyingBitmap to null. Instead, "+
"dispose of this object and create a new one later if " +
"neccessary. (A zero sized bmp can not be written to disk)"
);
if(_bitmap != null)
{
_bitmap.Dispose();
}
_bitmap = value;
Sync();
}
}
}
}
|