4,816
社区成员
发帖
与我相关
我的任务
分享
System.IO.MemoryStream ms = new System.IO.MemoryStream();
this._image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] bytes = new byte[] { };
bytes = ms.GetBuffer();
outStream.writeByteArray(bytes);
//上面是转换为byte数组,下面这段是写入文件:
public void writeByteArray(byte[] bytes)
{
long length = bytes.Length;
byte[] tbs = BitConverter.GetBytes(length);
for (int i = 0; i < tbs.Length; i++)
{
writer.Write(tbs[i]);
}
for (int i = 0; i < bytes.Length; i++)
{
writer.Write(bytes[i]);
}
}
public byte[] readBytesArray()
{
ulong temp = 0;
ulong length = (ulong)BitConverter.GetBytes(temp).Length;
byte[] byLen = new byte[length];
for (ulong i = 0; i < length; i++)
{
byLen[i] = cacheBuff[this.position++];
}
length = BitConverter.ToUInt64(byLen, 0);
byte[] bytes = new byte[length];
for (ulong i = 0; i < length; i++)
{
bytes[i] = cacheBuff[this.position++];
}
return bytes;
}
然后转换成image图片的代码如下:
byte[] bytes = inStream.readBytesArray();
System.IO.MemoryStream ms = new System.IO.MemoryStream();
ms.Write(bytes,0,bytes.Length);
this._image = Bitmap.FromStream(ms);
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Reflection;
using System.IO;
using System.Drawing.Imaging;
namespace FineUI
{
/// <summary>
/// 资源处理程序
/// </summary>
public class ResourceHandler : IHttpHandler
{
/// <summary>
/// 处理资源的请求
/// </summary>
/// <param name="context">Http请求上下文</param>
public void ProcessRequest(HttpContext context)
{
string type = String.Empty,
typeValue = String.Empty,
resName = "FineUI.";
if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["icon"]))
{
type = "icon";
}
else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["js"]))
{
type = "js";
resName += "js." + typeValue;
}
else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["lang"]))
{
type = "lang";
resName += "js.lang." + typeValue;
}
else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["theme"]))
{
type = "theme";
resName += "res.theme." + typeValue;
}
else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["css"]))
{
type = "css";
resName += "res.css." + typeValue;
}
else if (!String.IsNullOrEmpty(typeValue = context.Request.QueryString["img"]))
{
type = "img";
resName += "res.img." + typeValue;
}
byte[] binary;
switch (type)
{
case "icon":
if (!typeValue.EndsWith(".png") && !typeValue.EndsWith(".gif"))
{
typeValue = IconHelper.GetName((Icon)Enum.Parse(typeof(Icon), typeValue));
}
//resName += "res.icon." + typeValue;
string serverPath = String.Format("{0}/{1}", GlobalConfig.GetIconBasePath(), typeValue);
context.Response.WriteFile(context.Server.MapPath(serverPath));
context.Response.ContentType = "image/" + GetImageFormat(typeValue);
break;
case "js":
case "lang":
context.Response.Write(ResourceHelper.GetResourceContent(resName));
context.Response.ContentType = "text/javascript";
break;
case "css":
context.Response.Write(ResourceHelper.GetResourceContent(resName));
context.Response.ContentType = "text/css";
break;
case "theme":
case "img":
binary = ResourceHelper.GetResourceContentAsBinary(resName);
context.Response.OutputStream.Write(binary, 0, binary.Length);
//context.Response.Write(ResourceHelper.GetResourceContent(resName));
context.Response.ContentType = "image/" + GetImageFormat(resName);
break;
}
// 缓存一年,只能通过改变 URL 来强制更新缓存
context.Response.Cache.SetExpires(DateTime.Now.AddYears(1));
context.Response.Cache.SetCacheability(HttpCacheability.Public);
}
//private void RenderImage(HttpContext context, string resName)
//{
// Assembly assembly = Assembly.GetExecutingAssembly();
// using (Stream stream = assembly.GetManifestResourceStream(resName))
// {
// using (System.Drawing.Image image = System.Drawing.Image.FromStream(stream))
// {
// // PNG输出时出现“GDI+ 中发生一般性错误”
// using (MemoryStream ms = new MemoryStream())
// {
// image.Save(ms, image.RawFormat);
// ms.WriteTo(context.Response.OutputStream);
// context.Response.ContentType = "image/" + GetImageFormat(image.RawFormat);
// }
// }
// }
//}
private string GetImageFormat(string imageName)
{
int lastDotIndex = imageName.LastIndexOf(".");
if (lastDotIndex >= 0)
{
return imageName.Substring(lastDotIndex + 1);
}
return "png";
}
private string GetImageFormat(ImageFormat format)
{
if (format == ImageFormat.Bmp)
{
return "bmp";
}
else if (format == ImageFormat.Gif)
{
return "gif";
}
else if (format == ImageFormat.Jpeg)
{
return "jpeg";
}
else if (format == ImageFormat.Png)
{
return "png";
}
else if (format == ImageFormat.Tiff)
{
return "tiff";
}
else if (format == ImageFormat.Icon)
{
return "icon";
}
return "gif";
}
/// <summary>
/// 只要请求的 URL 相同,则请求可以重用
/// </summary>
public bool IsReusable
{
get
{
return true;
}
}
}
}
System.IO.MemoryStream ms = new System.IO.MemoryStream();
if (System.Drawing.Imaging.ImageFormat.Bmp.Guid.ToString().Equals(this.imageType))
{
this._image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
}
else if (System.Drawing.Imaging.ImageFormat.Emf.Guid.ToString().Equals(this.imageType))
{
this._image.Save(ms, System.Drawing.Imaging.ImageFormat.Emf);
}
else if (System.Drawing.Imaging.ImageFormat.Exif.Guid.ToString().Equals(this.imageType))
{
this._image.Save(ms, System.Drawing.Imaging.ImageFormat.Exif);
}
else if (System.Drawing.Imaging.ImageFormat.Gif.Guid.ToString().Equals(this.imageType))
{
this._image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
}
else if (System.Drawing.Imaging.ImageFormat.Jpeg.Guid.ToString().Equals(this.imageType))
{
this._image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
}
else if (System.Drawing.Imaging.ImageFormat.MemoryBmp.Guid.ToString().Equals(this.imageType))
{
this._image.Save(ms, System.Drawing.Imaging.ImageFormat.MemoryBmp);
}
else if (System.Drawing.Imaging.ImageFormat.Png.Guid.ToString().Equals(this.imageType))
{
this._image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
}
else if (System.Drawing.Imaging.ImageFormat.Icon.Guid.ToString().Equals(this.imageType))
{
this._image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
}
else
{
this._image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
}
但是 第一个 问题呢????
就是防止 文件 太大 保存 可能 越界 .. 有更好的方法吗?