Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБ4 ЛабграфWEB_.doc
Скачиваний:
7
Добавлен:
14.05.2015
Размер:
415.23 Кб
Скачать

Возможности преобразований графических файлов при их отображении на сайте

Все примеры, которые приведены ниже, используют подход к отображению графической информации с использованием дополнительной страницы (описанный ранее).

На первом этапе необходимо создать илиСкачать пустой проект Web сайта

Для использования кода в MakeGraph, в вызывающей странице (файл Default.aspx.cs) объявлена переменная public string sTegImage = string.Empty;, а в файл Default.aspx тэг, через который происходит вызов страницы MakeGraph.aspx:

<%=sTegImage%>

Сами вызовы формируются динамически, а для выбора файлов для отображения используется контрол FileUpload:

sTegImage = "<IMG src = \"MakeGraph.aspx?fn=" + sFileName + "\">";

Таким образом, для повторения примеров создайте проект, показанный на Рис.1 :

Рис.1 Проект Web сайта

Рассмотрим отображение картинок. Код вызывающей страницы :

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Drawing;

public partial class _Default : System.Web.UI.Page

{

public string sTegImage = string.Empty;

#region Page_Load

protected void Page_Load(object sender, EventArgs e)

{

Label1.Text = "";

}

#endregion

#region Загрузка картинок и эксперименты

protected void Button1_Click(object sender, EventArgs e)

{

string sPath = @"c:\temp\";

string sFileName = string.Empty;

if (FileUpload1.HasFile)

{

sFileName = sPath + FileUpload1.FileName;

FileUpload1.SaveAs(sFileName);

}

else

{

Label1.ForeColor = Color.Red;

Label1.Text = "Выберите файл для проведения эксперимента";

return;

}

sTegImage = "<IMG src = \"MakeGraph.aspx?fn=" + sFileName + "\">";

//В случае, когда необходимо разделение вызова по расширению

//string s = sFileName.Substring(sFileName.LastIndexOf(".")+1);

//if (s.ToUpper() == "BMP")

//{

// .........

}

#endregion

}

Напомним, что Web Form MakeGraph состоит из файла MakeGraph.aspx с одной единственной строкой:

<%@ Page Language="C#" AutoEventWireup="true"

CodeFile="MakeGraph.aspx.cs" Inherits="MakeGraph" %>

Код MakeGraph.aspx.cs имеет одну функцию Page_Load:

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Drawing;

using System.Drawing.Imaging;

using System.Drawing.Drawing2D;

using System.IO;

public partial class MakeGraph : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

}

}

Все приводимые ниже примеры связаны с наполнением содержимым функции Page_Load класса MakeGraph.

Вывод рисунков на Web сайт

Приведенный ниже код позволяет выводить картинки на сайт, масштабировать картинки файлов форматов jpeg, bmp, png, gif, wmf, emf,tiff, ico. Анимированные файлы gif выводятся как не анимированные (о том, как вывести анимированные Gif - см. в конце этого параграфа). При использовании данного кода файлы формата tiff не загружаются на страничку в формате tiff. Правда, и обычным образом, они не могут быть выведены на html страницу (по крайней мере, в IE 7 вызов <img src="Путь\Имя_файла.tiff" ALT="Имя_файла.tiff"> не выводит рисунок на страничку), но преобразование к png формату позволяет выполнить их просмотр (то есть, приведенный ниже код отображает и tiff файлы).

Отметим, что мы можем сохранить формат вывода таким, как в исходном файле (для этого достаточно передать тип выбранного файла в параметрах вызова MakeGraph.aspx - его можно получить через свойство FileUpload1.PostedFile.ContentType). Однако целесообразнее передавать файлы на страничку в png, gif или jpeg форматах, что значительно сокращает сетевой трафик по сравнению с другими типами файлов.

В файле Default.aspx.cs пишем:

#region Загрузка картинок и эксперименты

protected void Button1_Click(object sender, EventArgs e)

{

string sPath = @"c:\temp\";

string sFileName = string.Empty;

if (FileUpload1.HasFile)

{

sFileName = sPath + FileUpload1.FileName;

//Переносим файл на сервер

FileUpload1.SaveAs(sFileName);

}

else

{

Label1.ForeColor = Color.Red;

Label1.Text = "Выберите файл для проведения эксперимента";

return;

}

//Формируем тэг IMG для странички Default.aspx.cs

sTegImage = "<IMG src = \"MakeGraph.aspx?fn=" + sFileName + "\">";

}

Код MakeGraph.aspx.cs:

protected void Page_Load(object sender, EventArgs e)

{

string sFileName = string.Empty;

try

{

sFileName = Request.QueryString.Get(0);

}

catch (Exception)

{

Response.End();

return;

}

//Загружаем картинку любого из перечисленных форматов в класс Bitmap

Bitmap bitmap = new Bitmap(sFileName);

//Если необходимо уменьшение размера картинки, например в 2 раза, используем

//метод GetThumbnailImage с параметрами bitmap.Width / 2, bitmap.Height / 2

//(размер может быть и увеличен 3*bitmap.Width / 2,3* bitmap.Height / 2)

Bitmap bitmapchange = (Bitmap)bitmap.GetThumbnailImage(bitmap.Width / 2, bitmap.Height / 2, null,

IntPtr.Zero);

MemoryStream memorystream=null;

try

{

memorystream = new MemoryStream();

//Передаем в массив в формате Png

bitmapchange.Save(memorystream, ImageFormat.Png);

byte[] b = memorystream.GetBuffer();

//В каком формате будем возвращать картинку

Response.ContentType = "image/png";

//Возвращаем картинку

Response.BinaryWrite(b);

}

catch (Exception ex)

{

Response.End();

}

bitmap.Dispose();

bitmapchange.Dispose();

memorystream.Dispose();

Если использовать вывод на страничку в формате jpeg, то код можно упростить (отказавшись от MemoryStream):

Response.ContentType = "image/jpeg";

bitmapchange.Save(Response.OutputStream, ImageFormat.Jpeg);

bitmap.Dispose();

bitmapchange.Dispose();

Для вывода на страничку анимированных gif файлов можно воспользоваться кодом, приведенным ниже. Он отличается от предыдущего тем, что в нем исключено масштабирование, так как попытка изменить масштаб gif файла приводит к потере анимационных кадров, кроме первого.

string sFileName = Request.QueryString.Get(0);

System.Drawing.Image image = System.Drawing.Image.FromFile(sFileName);

MemoryStream memorystream = new MemoryStream();

image.Save(memorystream, ImageFormat.Gif);

Response.ContentType = "image/gif";

byte[] b = memorystream.GetBuffer();

Response.BinaryWrite(b);

memorystream.Dispose();

image.Dispose();

//Или так

string sFileName = Request.QueryString.Get(0);

System.Drawing.Image image = System.Drawing.Image.FromFile(sFileName);

MemoryStream memorystream = new MemoryStream();

image.Save(memorystream, ImageFormat.Gif);

Response.ContentType = "image/gif";

Response.BinaryWrite(memorystream.ToArray());

memorystream.Dispose();

image.Dispose();

//Или так

string sFileName = Request.QueryString.Get(0);

System.Drawing.Image image = System.Drawing.Image.FromFile(sFileName);

MemoryStream memorystream = new MemoryStream();

image.Save(memorystream, ImageFormat.Gif);

string sImage = Convert.ToBase64String(memorystream.ToArray());

memorystream.Flush();

memorystream = new MemoryStream(Convert.FromBase64String(sImage));

Response.BinaryWrite(mem.ToArray());

memorystream.Dispose();

image.Dispose();