Хочу наложить надпись (представляет собой текст "только для предварительного ознакомления" в прямоугольнике) поверх основной картинки…проблема в том, что основные картинки разных размеров и поэтому нужно применять масштабирование накладываемой надписи на картинку, чтобы эта надпись ровно встала с правой стороны картинки и чтобы полностью виделся весь текст надписи…у меня это пока не получается, текст надписи либо наполовину отображается либо ваще нету либо еще както, а сам контейнер (прямоугольник) для надписи, его расположение я сделал так, чтобы он всегда занимал половину картинки, независимо от размера картинки. теперь надо тока решить что делать с самим текстом надписи, т.к. он не полностью отображается на маленьких или среднего размера картинках, из-за отсутствующего масштабирования текста… с большими картинками проблем меньше с отображением, там в основном надпись всегда полностью отображается.
теперь поподробнее…
public void ProcessRequest(HttpContext context)
{
// Убеждаемся, что аргумент ID, содержащийся в URL, является числом
int id = -1;
bool result = Int32.TryParse(context.Request.QueryString["id"], out id);
if (!result)
context.Response.End();
string connString =
ConfigurationManager.ConnectionStrings["aspBase"].ConnectionString;
string cmdText = "SELECT shoot FROM films WHERE id=@id";
// Извлекаем массив байтов
byte[] img = null;
SqlConnection conn = new SqlConnection(connString);
using (conn)
{
System.Data.SqlClient.SqlCommand cmd = new SqlCommand(cmdText,
conn);
cmd.Parameters.AddWithValue("@id", id);
conn.Open();
img = (byte[])cmd.ExecuteScalar();
conn.Close();
}
// Подготавливаем ответ для браузера
if (img != null)
{
Stream bmpStream = new MemoryStream(img);
Bitmap bmp = new Bitmap(bmpStream); // моя основная картинка
AddText(bmp, "Только для предварительного ознакомления"); // вызываем функцию добавления текста ("Только для предварительного ознакомления") на основную картинку (bmp)
context.Response.ContentType = "image/jpeg"; // подсказываем браузеру что у нас за формат
bmp.Save(context.Response.OutputStream, ImageFormat.Jpeg);
bmp.Dispose();
bmpStream.Dispose();
}
}
//в этой функции я добавляю ту самую надпись поверх картинки
private void AddText(Bitmap bmp, string Text)
{
Graphics g = Graphics.FromImage(bmp);
// Определение выравнивания текста
StringFormat strFmt = new StringFormat();
strFmt.Alignment = StringAlignment.Center;
// Создание кисти для написания текста
// (зеленый текст на черном фоне)
SolidBrush btmForeColor = new SolidBrush(Color.PaleGreen);
SolidBrush btmBackColor = new SolidBrush(Color.Black);
// Для вычисления координат записи определяем размеры
// текста с учетом гарнитуры и размера шрифта
Font btmFont = new Font("Verdana", 11);
SizeF textSize = new SizeF();
textSize = g.MeasureString(Text, btmFont);
// Рассчитываем координаты прямоугольника и заполняем его
float x = ((float)bmp.Width - bmp.Width / 2); // чтобы прямоугольник!!! занимал половину картинки по ширине
float y = ((float)bmp.Height - (bmp.Height / 15)); // чтобы прямоугольник!!! занимал нижнюю часть картинки по высоте
float w = ((float)x + textSize.Width); // ширина надписи
float h = ((float)y + textSize.Height);// высота надписи
RectangleF textArea = new RectangleF(x, y, w, h);
g.FillRectangle(btmBackColor, textArea);
// Рисуем текст и освобождаем ресурсы
g.DrawString(Text, btmFont, btmForeColor, textArea);
btmForeColor.Dispose();
btmBackColor.Dispose();
btmFont.Dispose();
g.Dispose();
}
в итоге я считаю, что нужно масштабировать текст ("только для преварительного ознакомления") находящийся в прямоугольнике…но какой алгоритм вычисления масштаба текста применить, я не знаю.