- •Отображение графической информации с использованием HttpHandler
- •Отображение графической информации с использованием дополнительной страницы
- •Возможности преобразований графических файлов при их отображении на сайте
- •Вывод рисунков на Web сайт
- •Возможности преобразования форматов графических файлов с использованием класса Bitmap
- •Возможности сжатия и трансформации графических файлов, преобразованных в формат jpg
- •Сжатие формата jpg
- •Трансформация файла формата jpg
- •Возможности сжатия графических файлов изменением числа бит на пиксель и их трансформации
- •Использование метода DrawImage для работы с графическими файлами
- •Трансформация и прозрачность изображений
- •Имитация прозрачного фона и вывод рисунков с прозрачным фоном
Трансформация и прозрачность изображений
Код, приведенный ниже, позволяет создать ColorMatrix, которая будучи включенной в качестве атрибута в ImageAttributes, позволит выполнить отрисовку изображения со степенью прозрачности 0.3. Кроме того, код демонстрирует применение метода RotateTransform при отрисовке изображений на Web сайт.
protected void Page_Load(object sender, EventArgs e)
{
try
{
string sFileName = Request.QueryString.Get(0);
System.Drawing.Image image = System.Drawing.Image.FromFile(sFileName);
Bitmap bitmap = new Bitmap(image.Width*3, image.Height*3, PixelFormat.Format24bppRgb);
Graphics graphics = Graphics.FromImage(bitmap);
graphics.Clear(Color.WhiteSmoke);
image.RotateFlip(RotateFlipType.Rotate90FlipX);
graphics.DrawImage(image, 0, 0);
graphics.RotateTransform(15, MatrixOrder.Append);
graphics.DrawImage(image, image.Width, 0);
graphics.RotateTransform(30, MatrixOrder.Append);
ImageAttributes imageattributes = new ImageAttributes();
ColorMatrix colormatrix = new ColorMatrix();
imageattributes.SetColorMatrix(new ColorMatrix(new float[][]{
new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0},
new float[] {0, 0, 1, 0, 0},
new float[] {0, 0, 0, 0.3f, 0},
new float[] {0, 0, 0, 0, 1}}));
graphics.DrawImage(image, new Rectangle (300,50,image.Width, image.Height),
0,0,image.Width, image.Height,GraphicsUnit.Pixel, imageattributes);
Response.ContentType = "image/jpeg";
bitmap.Save(Response.OutputStream, ImageFormat.Jpeg);
Response.End();
bitmap.Dispose();
image.Dispose();
}
catch (Exception ex)
{
Response.End();
return;
}
}
Данный код работает с bmp, png, jpeg, gif, ico файлами без дополнительных преобразований.
Рис.3 Использование метода DrawImage
Имитация прозрачного фона и вывод рисунков с прозрачным фоном
Используя метод DrawImage вывести на сайт рисунок с прозрачным фоном невозможно. Причина в том, что отрисовку изображения метод выполняет на собственный холст, цвет которого можно задать методом Clear.
graphics.Clear(Color.White);
В данном случае метод будет рисовать изображение по белому фону, а при задание цветов, которые должны быть прозрачными, они будут заменены белым. Это хорошо, когда страничка, на которую выводится изображение, белая - создается эффект прозрачности фона. А как быть в том случае, если на страничке используется background-image или, как на данной страничке, которую Вы читаете?
В таких случаях я использую поэтапный вывод, который заключается в том, что сначала картинка отрисовывается методом DrawImage на холсте с каким-нибудь редко встречающимся в рисунках цветом, а затем методами HTML передается на сайт с указанием сделать цвет холста прозрачным.
Для выполнения данных шагов и наглядности, выполним следующее:
-
Изменим фон странички, для чего в файле Default.aspx изменим тэг body:
-
<body style="background-color : Teal">
-
В файле Default.aspx.cs изменим вывод картинки на сайт, как картинки с прозрачным цветом:
-
sTegImage = "<IMG style=\"filter:Chroma(Color='#010101')\"
-
src = \"MakeGraph.aspx?cs=" + sFileName +"\">";
-
В файле MakeGraph.aspx.cs напишем нижеприведенный код:
-
string sFileName = Request.QueryString.Get(0);
-
System.Drawing.Image image = System.Drawing.Image.FromFile(sFileName);
-
//Картинку будем выводить уменьшенную в 2 раза
-
Bitmap bitmap = new Bitmap(image.Width/2, image.Height/2, PixelFormat.Format24bppRgb);
-
Graphics graphics = Graphics.FromImage(bitmap);
-
//Цветом прозрачности выбираем цвет пикселя изображения [0,0]
-
Bitmap bitmap1 = new Bitmap(image);
-
Color transparentcolor = bitmap1.GetPixel(0, 0);
-
ImageAttributes imageattributes = new ImageAttributes();
-
imageattributes.SetColorKey(transparentcolor, transparentcolor);
-
//Можно задать дипазон прозрачных цветов
-
//attr.SetColorKey(Color.FromArgb(0, 0, 250), Color.FromArgb(0, 0, 255));
-
//Делаем фон отрисовки почти черным
-
//Можно было задать белый, тогда при выводе на страничку с белам цветом
-
//будет эффект прозрачности фона
-
graphics.Clear(Color.FromArgb(1, 1,1));
-
graphics.DrawImage(image, new Rectangle(0, 0, image.Width/2, image.Height/2),
-
0, 0, image.Width, image.Height, GraphicsUnit.Pixel, imageattributes);
-
MemoryStream memorystream = new MemoryStream();
-
bitmap.Save(memorystream, ImageFormat.Png);
-
byte[] b = memorystream.GetBuffer();
-
Response.ContentType = "image/png";
-
Response.BinaryWrite(b);
Результат работы показан на Рис.4.
Рис. 4 Использование прозрачного фона