Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод текста на картинку 
:(
    Опции темы
Darkmaster
Дата 13.3.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Пытаюсь по щелчку мышью на PictureBox вывести текст на изображение, делаю так:

Код

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            Graphics g = Graphics.FromImage(pictureBox1.Image);
            if (Flag == true)
                g.DrawString(TextField, new Font("Times New Roman", 30), Brushes.Black, new PointF(e.X, e.Y));
         }


Никакого эффекта. Что-то подобное делал для вывода текста на форму, получалось. 
--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
Idsa
Дата 13.3.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Похоже, что Flag у тебя равен false, и, согласно условию, прорисовка текста не происходит.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Gelis
Дата 13.3.2007, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 26.10.2006
Где: Брест

Репутация: 2
Всего: 4



Цитата(Darkmaster @  13.3.2007,  14:52 Найти цитируемый пост)
Graphics g = Graphics.FromImage(pictureBox1.Image);

PictureBox - это не картинка а контрол
Вот правильное решение:
Код

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            Graphics g = Graphics.FromHwnd(pictureBox1.Handle);
            g.DrawString("Привет", new Font("Times New Roman", 30), Brushes.Black, new PointF(e.X, e.Y));
        }




Это сообщение отредактировал(а) Gelis - 13.3.2007, 15:09
PM MAIL   Вверх
Idsa
Дата 13.3.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Цитата(Gelis @  13.3.2007,  15:06 Найти цитируемый пост)
Цитата(Darkmaster @  13.3.2007,  14:52 )Graphics g = Graphics.FromImage(pictureBox1.Image);PictureBox - это не картинка а контрол

Дык Darkmaster получает Griphics не из контрола PictureBox, а из хранящегося в нем Image. IMHO, в этом месте нет ошибки.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
mr.DUDA
Дата 13.3.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Если флаг = true, и DrawString точно проходит, то может быть не хватает вызова Dispose (или Flush, на худой конец) у графикса ?


--------------------
user posted image
PM MAIL WWW   Вверх
Darkmaster
Дата 13.3.2007, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Flag точно true стоит....хм...ничего не помогает. Пробовал немного изменить приложение для вывода текста на форму, туда выводит, а на картинку нет
--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
Idsa
Дата 13.3.2007, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Еще вариант. Может, у тебя Image равен null? Если ты не создаешь Image вручную, то он будет равен null. Если так, тогда измени строчку
Код

Graphics g = Graphics.FromImage(pictureBox1.Image);

на
Код

Graphics g = Graphics.FromHwnd(pictureBox1.Handle);
.
Должно помочь.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Gelis
Дата 13.3.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 26.10.2006
Где: Брест

Репутация: 2
Всего: 4



Цитата(Idsa @  13.3.2007,  15:16 Найти цитируемый пост)
Цитата(Gelis @  13.3.2007,  15:06 )    
Цитата(Darkmaster @  13.3.2007,  14:52 )Graphics g = Graphics.FromImage(pictureBox1.Image);PictureBox - это не картинка а контрол    

Дык Darkmaster получает Griphics не из контрола PictureBox, а из хранящегося в нем Image. IMHO, в этом месте нет ошибки.

Я имел ввиду, что Darkmaster рисует на картинке которая входит в контрол, но изменения внесенные на картинку не  отображаются, потому что сам объект image не изменился, а в методе OnPaint() для ее рисования просто вызывается DrawImage(). В итоге просто рисуется картинка.
Если размер PictureBox превышает размеры рисунка, то легко можно указать прямоугольник в который нужно выводить текст. В итоге получим нужный эфект.


Цитата(Idsa)

код C#    
1: Graphics g = Graphics.FromHwnd(pictureBox1.Handle);    
Должно помочь.

Ну так в моем коде так и делается
PM MAIL   Вверх
Idsa
Дата 13.3.2007, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Цитата(Gelis @  13.3.2007,  17:04 Найти цитируемый пост)
Я имел ввиду, что Darkmaster рисует на картинке которая входит в контрол, но изменения внесенные на картинку не  отображаются, потому что сам объект image не изменился

С чего ты взял? Как раз таки именно при получении Graphics через Graphics.FromImage рисовать нужно один раз и не нужно ничего перерисовывать. Я сам не знаю, почему так происходит... но это факт. Сравни:
Код

pictureBox1.Image = Image.FromFile("ex.bmp");
Graphics g = Graphics.FromImage(pictureBox1.Image);
g.DrawString("Hello", new Font("Times New Roman", 30), Brushes.Aqua, new Point(30, 30));

и
Код

pictureBox1.Image = Image.FromFile("ex.bmp");
Graphics g = Graphics.FromHwnd(pictureBox1.Handle);
g.DrawString("Hello", new Font("Times New Roman", 30), Brushes.Aqua, new Point(30, 30));

Во втором случае (в твоем) изменения не сохраняются и приходится перерисовывать.
Кстати, может, мне кто-нибудь скажет, как так хитро получается, что при получении Graphics вот так: Graphics.FromImage изменения сохраняются в самом Image.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
HCman
Дата 14.3.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 14.3.2007
Где: Пермь

Репутация: нет
Всего: нет



Мне кажется такой вариант должен подойти (в первом коде нехватало одной строчки)
Код

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
            Graphics g = Graphics.FromImage(pictureBox1.Image);
            if (Flag == true)
           {
                g.DrawString(TextField, new Font("Times New Roman", 30), Brushes.Black, new PointF(e.X, e.Y));
                pictureBox1.Refresh();
           }
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1749 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.