![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Xonxt |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 24.1.2006 Где: Украина / Одесса Репутация: 1 Всего: 1 |
Знаю, такие темы уже были. Я их смотрел, но они мне или не подошли, или не работают. Так что спрошу еще раз.
Итак. У меня есть, к примеру, объект Panel. На этой панели я с помощью мыши что-нибудь рисую. Теперь я хочу сохранить нарисованное в файл. Как это сделать? Мне удалось сделать нечто подобное на основе pictureBox. Я сделал CreateGraphics() на pictureBox'e, а затем нарисованное перекидывал на Bitmap, а затем присваивал picture.Box.Image = Bitmap,или что-то в этом роде. Я и сам не понял В общем, помогите советом, либо, как сделать подобное на основе Panel, либо PictureBox. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Обрабатывай событие Paint, в нём создавай новый Bitmap и новый Graphics из этого битмапа, рисуй всё в этот графикс, в конце обработчика диспозь графикс и сохраняй битмап в файл. Затем смело выводи битмап в графикс из PaintEventArgs.Graphics методом DrawImage
-------------------- ![]() |
|||
|
||||
| Xonxt |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 24.1.2006 Где: Украина / Одесса Репутация: 1 Всего: 1 |
Ммм... примерно понятно... спасибо.
Но, всё-таки, не помешал бы простенький пример в виде листинга. |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Вот попытка материализовать мысли mr.DUDA
На форме: панель drawPanel и кнопка button1. В программе реализован простенький (очень простенький P. S. Проект в аттаче. Это сообщение отредактировал(а) Idsa - 18.3.2007, 01:56 Присоединённый файл ( Кол-во скачиваний: 15 )
TestWinApp.rar 31,12 Kb |
|||
|
||||
| Xonxt |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 24.1.2006 Где: Украина / Одесса Репутация: 1 Всего: 1 |
Спасибо.
Вот что получилось у меня:
Единственная проблема: при самом рисовании из-за Invalidate() изображение дрожит. Сам посмотри. Куда посоветуешь переместить Invalidate()? А то если я помещу его в MouseUp, то нарисованную линию видно только когда отпустишь мышь, а это не есть хорошо! Присоединённый файл ( Кол-во скачиваний: 10 )
graph02.rar 35,37 Kb |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
"Дрожание" изображения - извечная проблема. Попробуй поставить свойство DoubleBuffered для формы в true. Если поможет, - хорошо, если же нет... нужно думать над оптимизацией.
Кстати, насчет оптимизации... по-моему не стоит сохранять изображение в MouseUp: накладненько однако |
|||
|
||||
| Xonxt |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 24.1.2006 Где: Украина / Одесса Репутация: 1 Всего: 1 |
Гм.. у формы нет такого параметра DoubleBuffered.. Можно поподробнее?
Это сообщение отредактировал(а) Xonxt - 18.3.2007, 15:31 |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Есть! Посмотри в дизайнере в окне свойств, или напиши в конструкторе формы this.DoubleBuffered, или в MSDN глянь.
|
|||
|
||||
| agl |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 25.6.2006 Репутация: нет Всего: 3 |
У тебя наверно vs 2005, в 2003 ничего подобного вроде нету.
|
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Я не пойму, почему некоторые не переходят на 2005-ю студию?! Все никак денег (80 рублей А вообще, конечно, странно: я DoubleBuffered юзал еще в Delphi 7. |
|||
|
||||
| agl |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 25.6.2006 Репутация: нет Всего: 3 |
Дык, у кого привычка, у кого в заведениях стоят ещё старые студии. А при чем тут 80 рублей? Это цена пиратского диска
|
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Тссс... Переход на 2005 студию может подразумевать переход на фреймворк 2.0 или 3.0. Об особенностях как второго, так и третьего фреймворка написано немало статей. От себя могу сказать, что усовершенствования 2.0 принципиальны, а вот переход на 3.0 ИМХО можно отложить до 3.5 (и студии 2007). P. S. До меня только что дошло, что мы оффтопим |
|||
|
||||
| Xonxt |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 24.1.2006 Где: Украина / Одесса Репутация: 1 Всего: 1 |
Закончу оффотп тем, что в Университете мы работаем с 2003, поэтому, дома я работаю, соответственно, тоже с 2003.
А в 2003 такого свойства как DoubleBuffered нету, а оно там реализуется как-то по-другому. Надо книжку почитать ) |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Точно. Сейчас глянул в MSDN: действительно, DoubleBuffered появился только во втором фреймворке. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
В 2003 у формы есть SetStyle(ControlStyles.DoubleBuffered), если я правильно помню.
-------------------- ![]() |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Правильнее будет вот так:
Вот только беда - перерисовывается-то панель, а не форма. Поэтому от этого будет мало толка. ИМХО, лучше написать наследник панели и его добавить на форму. -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| agl |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 25.6.2006 Репутация: нет Всего: 3 |
А что даст наследник панели? Может лучше наследник формы?
|
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Так твоя форма итак уже есть наследник System.Windows.Forms.Form В наследнике можно ничего не переписывать только в конструктор добавить строки
тогда от них будет больший эфект. Эти строки устанавливают стиль прорисовки данного контрола. Если их добавить на форму (точнее, как уже выяснилось наследник формы) то они точно ускорят прорисовку самой формы, но не факт, что ускорят прорисовку контролов на форме. -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| agl |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 25.6.2006 Репутация: нет Всего: 3 |
А код написать можно
|
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Дальше кидаешь этот контрол на форму. И делаешь с ним все то же самое что и с обычной панелью. -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| agl |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 25.6.2006 Репутация: нет Всего: 3 |
2Naum
Всё получилось, огромноё спасибо! Если не трудно, объясни пожалуйста, почему у наследника класса Панель есть свойства(SetStyle), которых нет у самого класса Панель? |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
О, батенька, так это вам надо RTFM. И мне тоже, наверное.
Есть такое понятие как уровень доступа членов класса. (Объясняльщик из меня не очень, так что если не понятно - спрашивай). Обычно выделяют пять уровней (по крайней мере в C#) 1. public - Доступ не ограничен. 2. protected - Доступ ограничен содержащим классом и классами наследниками от этого класса (именно поэтому метод SetStyle класса Control виден только в классах наследниках). 3. internal - Доступ ограничен содержащей класс сборкой. 4. protected internal - Доступ ограничен содержащей сборкой и классами наследниками. 5. private - Доступ ограничен содержащим классом. -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| agl |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 25.6.2006 Репутация: нет Всего: 3 |
Спасибо за объяснение
|
|||
|
||||
| Xonxt |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 24.1.2006 Где: Украина / Одесса Репутация: 1 Всего: 1 |
щас попробуем...
***** Ребят! Всем спасибо! Изображение нифига не дрожит! Я думал как-то сделать двойную буферизацию для панели, но не догадался переписать конструктор по-умолчанию. Спасибо ) +1 шаг к завершению курсовой. Это сообщение отредактировал(а) Xonxt - 19.3.2007, 21:10 |
|||
|
||||
| agl |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 25.6.2006 Репутация: нет Всего: 3 |
Не дрожит
2Xonxt У меня ещё вопросик, почему в твоей проге сохранение не происходит? Теоритически, сохранение в событии panel1_MouseUp, а практически, при запуске твоей проги ничего не сохраняется :(, у меня по крайней мере, почему? |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
agl, насчет сохранения... А у тебя метод panel1_MouseUp точно подписан на событие panel1.MouseUp?
protected. Если бы было protected internal, то из твоего проекта (который по сути является уже другой сборкой) этот метод не был бы виден. Это сообщение отредактировал(а) Naum - 20.3.2007, 13:29 -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Что-то я мысль не уловил :(. protected internal же "шире" protected. Значит, как я понимаю, в данном случае для пользователей панели нет разницы, protected или protected internal объявлен SetStyle: эффект один и тот же. Вот мне тоже так кажется. Подскажите все-таки, чем вызвано запротекчивание |
|||
|
||||
| agl |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 25.6.2006 Репутация: нет Всего: 3 |
Точно. Она даже сохраняется в виде чёрного квадрата. Это сообщение отредактировал(а) agl - 21.3.2007, 09:35 Присоединённый файл ( Кол-во скачиваний: 5 )
_MyPanel.rar 21,02 Kb |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Тьфу ты блин, сам запутался. Точно. protected internal "шире". agl, Странно. В твоем проекте ничего не менял. Все сохраняет. З.Ы. Верните старые смайлы. -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| agl |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 25.6.2006 Репутация: нет Всего: 3 |
Очень странно ((, прикрепляю рисунок, который у меня сохраняется в bin\Debug\img.bmp Добавлено @ 11:20 В моем компе рисунок отображается как черный квадрат(смотрела и в Paint и в viewer'е, непонимаю в чём дело. А на форуме рисунок отображается Это сообщение отредактировал(а) agl - 21.3.2007, 11:21 Присоединённый файл ( Кол-во скачиваний: 7 )
img.bmp 4,75 Kb |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Прям полтергейст какой-то.
Там волнистая линия на белом фоне. З.Ы. Блин, а как тут прикрепить файл??? -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| agl |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 25.6.2006 Репутация: нет Всего: 3 |
В бысром ответе видимо никака. Выбери предворительный просмотр сообщения и внизу появится textbox с кнопкой Browse, там и загрузи. В моем компе я вижу только черный квадрат, а на форуме хоть какое то изображение видно. Может у меня система прибалела..
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |