Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > C++ Builder
Перезагрузить страницу Как рисовать пикселы на Image
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Dругая Dругая вне форума
Member
 
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.11.2005
По умолчанию Как рисовать пикселы на Image - 07.12.2005, 13:13

Image->Canvas->Pixels[i][j]= цвет.
Так? А то у меня что-то все мигает и глючит как-то
Так все ок: Canvas->Pixels[i][j]= цвет, но это не Image
Ответить с цитированием
  (#2 (permalink)) Старый
MaMaV MaMaV вне форума
Member
 
Сообщений: 1,984
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.09.2005
По умолчанию Re: Как рисовать пикселы на Image? - 07.12.2005, 13:29

Цитата:
Originally posted by Dругая
[b]Image->Canvas->Pixels[i][j]= цвет.
Так? А то у меня что-то все мигает и глючит как-то
Так все ок: Canvas->Pixels[i][j]= цвет, но это не Image
можно так
Код:
        Form1->Image2->Canvas->Pixels[i][j]=clBlack;
а можно и вот так попробовать
Код:
Image5->Picture->Bitmap->Canvas->
Хотя я рисую первым способом и никаких глюков нет....
Ответить с цитированием
  (#3 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 6,761
Сказал(а) спасибо: 15
Поблагодарили 821 раз(а) в 806 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 07.12.2005, 13:34

Смотрите методы класса Canvas
Ответить с цитированием
  (#4 (permalink)) Старый
Dругая Dругая вне форума
Member
 
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.11.2005
По умолчанию 07.12.2005, 13:57

Всем спасибо, по-моему, надо было просто убрать функцию
Код:
void __fastcall TForm1::FormPaint(TObject *Sender)
Я так поняла, при использовании Image, а не рисовании на форме она не нужна...
Ответить с цитированием
  (#5 (permalink)) Старый
SergeyV SergeyV вне форума
Member
 
Сообщений: 542
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 14.06.2005
По умолчанию 07.12.2005, 14:10

Еще бы объяснили, а как она появилась и зачем? Потом бы уж загадки загадывали.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Dругая Dругая вне форума
Member
 
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.11.2005
По умолчанию 07.12.2005, 14:16

Ну просто я рисовала сначала прямо на форме, а теперь решила переделать, вставив Image
А для формы, я так поняла, это надо, чтобы при передвижении окна, открытии сверху других, картинка оставалась в порядке.
Я не права?
Ответить с цитированием
  (#7 (permalink)) Старый
SergeyV SergeyV вне форума
Member
 
Сообщений: 542
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 14.06.2005
По умолчанию 07.12.2005, 14:26

Думаю, что не правы. Посмотрите мой вопрос несколько ниже "Как использовать метафайл для перерисовки формы". У меня пока толком ничего не получилось. Поделитесь секретом, как при наложении на форму другого окна или при изменении размера формы Вам удаётся сохранить на ней изображение, если Вы рисуете на канве формы.
Ответить с цитированием
  (#8 (permalink)) Старый
Dругая Dругая вне форума
Member
 
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.11.2005
По умолчанию 07.12.2005, 14:49

"Следует обратить внимание на важный момент. Изображение, сформированное на поверхности формы, может быть испорчено, например, в результате полного или частичного перекрытия другим окном... К счастью, операционная система информирует программу о необх-ти перерисовки окна, посылая ей соотв. сообщение, в рез-те чего возникает событие OnPaint... Таким образом, инструкции, обеспечивающие вывод графики на пов-ть формы надо поместить в функцию обработки события OnPaint"
(из книжки)

Уф, запарилась писать... В общем, я так и делала
Ответить с цитированием
  (#9 (permalink)) Старый
SergeyV SergeyV вне форума
Member
 
Сообщений: 542
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 14.06.2005
По умолчанию 07.12.2005, 15:02

Ну, а результат-то какой? Не портятся изображения? Как я могу поместить рисование в обработчик FormPaint, если я рисую мышкой по событиям OnMouseDown, OnMouseMove, OnMouseUp? Вот это мне непонятно. Всё что нарисовано мышкой, непременно исчезает при перекрытии или изменении размеров формы. Пробовал сохранять через метафайл, но хэлпов по метафайлам практически нету. В книгах Аръхангельского в качестве примеров приводят Bitmap, причем предварительно загоняют в Bitmap картинку из какого-нибудь файла. Так каждый сможет. Не говоря уж об компоненте TImage. Но у TImage есть один крупнейший недостаток, она не переопределяет свой размер в большую сторону. Т.е нарисованная TImage потихоньку может обрезаться, но никогда не увеличивает свою область. Сохранение образа канвы в метафайле имеет тоже существенный недостаток - канву нужно грохнуть, чтобы метафайл нарисовался, а новая канва, естественно, ничего не знает об изображении на старой канве. Пробовал работать с двумя канвами, но не понял, как передать инофрмацию с одной канвы на другую. В общем не так все просто. Если бы метафайл рисовался без удаления канвы - это было бы то, что и надо. Но, к сожалению, без удаления канвы метафайл ничего не рисует. Тупики на каждом шагу... Осваивать ассемблер ради этого жизни не хватит. Переходить в Visual Studio - так там сам черт ногу сломит.
Ответить с цитированием
  (#10 (permalink)) Старый
MidnightWolf MidnightWolf вне форума
Новичок
 
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.07.2004
По умолчанию 12.12.2005, 04:31

Чтобы рисовать на самой форме нужно в первую очередь хранить где-то информацию о том, что ты собираешься рисовать. Если ты рисуешь линии по точкам, то можно где-то хранить массив с координатами точек, а в функции OnPaint просто их постоянно выводить. Если ты рисуешь то, что не так легко засунуть в массив с координатами (например, разноцветными кистями различной формы всякие произвольные линии), то можно выделить отдельный лист – тип TBitmap, в него скопировать то, что ты нарисовал на форме(CopyRect в момент остановки рисования). Потом, в OnPaint, просто скопировать опять же с помощью КопиРекта, на форму содержимое твоего Bitmap. Все просто и очень быстро работает. Код не привожу, надеюсь сам разберешься. Если нет, то могу подробнее объяснить.

Изменять размеры изображения Image можно, и не только в меньшую сторону. Сам недавно полночи просидел над этим. После долгой медитации над Help’ом к Builder’у, выяснил, как это делается. Дело в том, что когда ты начинаешь рисовать на Image, то автоматически создается TBitmap размера твоего Image. На нем ты и рисуешь. Когда ты уменьшаешь размер Image – ты не изменяешь размер этого Bitmap, а просто сокращаешь отображаемую зону – по этому все работает нормально. Но когда ты увеличиваешь размер Image, то никто не изменяет автоматически размер Bitmap, вот и идет проблема. Ее очень легко решить – когда изменяешь размер Image, измени еще и размер Bitmap:

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Image1->Width = 600;
   Image1->Picture->Bitmap->Width = 600;
}
И всё, никаких проблем. Только помни, что вначале надо начать рисовать на холсте, а только затем изменять его размер, иначе не создастся Bitmap, и изменять станет нечего. Так что вначале можно просто прописать

Код:
Image1->Canvas->MoveTo(0,0);
Bitmap уже создался, а никакой графики на нем пока что нет. Эту строчку даже лучше запихнуть в OnCreate для формы...
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Треды и repaint как рисовать X-Cite_Forever J2ME 6 08.08.2008 15:53
Как рисовать на дисках? Woodpecker monitor Софт и программы 2 01.07.2007 15:13
В программе обрабатываются последовательно все пикселы TCanvas Shturmovik Delphi 2 22.11.2006 08:31
Как научиться рисовать в С++ Red_Warrior Вопросы начинающих программистов 1 01.03.2005 00:02
Алгоритм дуги как ее рисовать Wolverin_Terran Алгоритмы 3 01.12.2004 19:06
Как рисовать в Prolog Anonymous Prolog 2 18.11.2004 12:04
Как правильно рисовать в Java imported_IskanDer Java 1 05.06.2004 16:52
Xlib + Qt как рисовать vinco Общие вопросы программирования 6 18.05.2004 16:51
Как доставать пикселы под формой Кост Visual Basic 0 30.04.2004 09:53
Как рисовать без моргания Anonymous Assembler 2 10.11.2003 08:16
Scroll как в нем рисовать Aist++ WinAPI 5 17.09.2003 12:35
Как рисовать кубики Kutushut ASP 4 20.09.2002 12:01



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов