Карма: 0
Сообщений: 16 Сила слова: 0
|
привет.
Хочу наложить надпись (представляет собой текст "только для предварительного ознакомления" в прямоугольнике) поверх основной картинки...проблема в том, что основные картинки разных размеров и поэтому нужно применять масштабирование накладываемой надписи на картинку, чтобы эта надпись ровно встала с правой стороны картинки и чтобы полностью виделся весь текст надписи...у меня это пока не получается, текст надписи либо наполовину отображается либо ваще нету либо еще както, а сам контейнер (прямоугольник) для надписи, его расположение я сделал так, чтобы он всегда занимал половину картинки, независимо от размера картинки. теперь надо тока решить что делать с самим текстом надписи, т.к. он не полностью отображается на маленьких или среднего размера картинках, из-за отсутствующего масштабирования текста... с большими картинками проблем меньше с отображением, там в основном надпись всегда полностью отображается.
теперь поподробнее...
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();
}
в итоге я считаю, что нужно масштабировать текст ("только для преварительного ознакомления") находящийся в прямоугольнике...но какой алгоритм вычисления масштаба текста применить, я не знаю.
|
|
|
|
« Последнее редактирование: 01 Апрель, 2010, 10:15:42 от adw0rd »
|
Записан
|
%500
|
|
|
|
adw0rd ↓
|
 |
|
01 Апрель, 2010, 10:16:47 , спустя 1 минуту 5 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17634 Сила слова: 1.67
|
russianvodka, не "с#", а "c#" (не "эс шарп", а "цэ шарп")
|
|
|
|
|
Записан
|
|
|
|
|
Frozzeg ↓
|
 |
|
01 Апрель, 2010, 11:58:49 , спустя 1 час 42 минуты 2 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Санитары Карма: 92
Сообщений: 5501 Сила слова: 1.67
|
размер текста еще зависит от шрифта
вычисляешь размер прямоугольника и текста (а чтобы его вычислять, ну не знаю.. возьми две картинки разного размера, и вручную к ним подгони текст, и на основе этих данных (размера двух картинок и оптимальных размеров шрифтов для этих картинок) составляй алгоритм
|
|
|
|
|
Записан
|
|
|
|
|
CTAPbIu_MABP ↓
|
 |
|
01 Апрель, 2010, 04:36:03 , спустя 4 часа 37 минут 14 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
мавр
Группа: в ухо Карма: не нужна
Сообщений: 5187 Сила слова: 1.81
|
adw0rd, до диез
|
|
|
|
|
Записан
|
java.lang.OutOfMemoryError
|
|
|
|
adw0rd ↓
|
 |
|
01 Апрель, 2010, 04:44:15 , спустя 8 минут 12 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17634 Сила слова: 1.67
|
adw0rd, до диез
это музыкантам скажи
|
|
|
|
|
Записан
|
|
|
|
|
russianvodka ↓
|
 |
|
01 Апрель, 2010, 04:45:10 , спустя 55 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 16 Сила слова: 0
|
to Frozzeg:
ну это не решение проблемы таким способом. тем более в коде я указал, как я вычислил размеры прямоугольника...
жду еще советов
|
|
|
|
|
Записан
|
%500
|
|
|
|
artoodetoo ↓
|
 |
|
01 Апрель, 2010, 06:04:18 , спустя 1 час 19 минут 8 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
с особым цинизмом
Группа: в ухо Карма: 124
Сообщений: 3805 Сила слова: 3.26
|
Текст, я так понял, один и тот же без вариантов. Стало быть можно забить на текст, а работать с заранее отрендеренной картинкой на которой текст. Подгонка картинки под нужный размер задача давно известная.
1. из размеров фото вычисляешь размер прямоугольника, в который надо вписать твой "текст". Например это не более 1/4 высоты и не более ширины фото.
2. вычисляешь множитель, на который надо умножить размеры картинки-надписи, чтобы она вписалась в размер (1) - через min()
3. умножаешь размеры на множитель, используешь эти размеры для вычисления координат смещения
|
|
|
|
|
Записан
|
|
|
|
|
Frozzeg ↓
|
 |
|
01 Апрель, 2010, 09:20:32 , спустя 3 часа 16 минут 14 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Санитары Карма: 92
Сообщений: 5501 Сила слова: 1.67
|
vbnet2000 ?
|
|
|
|
|
Записан
|
|
|
|
|
russianvodka ↓
|
 |
|
02 Апрель, 2010, 10:54:09 , спустя 13 часов 33 минуты 37 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 16 Сила слова: 0
|
asp.net 2.0
|
|
|
|
|
Записан
|
%500
|
|
|
|
Frozzeg ↓
|
 |
|
02 Апрель, 2010, 01:34:44 , спустя 2 часа 40 минут 35 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Санитары Карма: 92
Сообщений: 5501 Сила слова: 1.67
|
я угадал
|
|
|
|
|
Записан
|
|
|
|
|