Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Базовое рисование 
V
    Опции темы
PandaRus
Дата 13.12.2007, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сейчас кое-как справился с примером програмки по книжке VC++. Программа представляет собой Виндоуз-приложение, где можно рисовать квадратики-кружки разных цветов.


Мне желательно написать программу, где будет на листе заранее нарисована сетка, и я буду разукрашивать квадратики сетки в разные цвета. После чего цвет каждого квадрата должен перевестись в какое-то число и присвоится переменной.

В идеале вижу процесс рисования как создание пиктограмм на кнопках панелей: размер кисти имеет размер ячейки или больши и при перемещении мыши перескакивает с ячеки на ячейку... Но в это в идеале.

Для начала я хотел бы узнать
-какие есть функции для преобразования цвета в число
-я нарисовал стационарную сетку, как по щелчку мыши на отрезке сетки, менять цвет отрезка.

Да, и есть ли спецальные программы для создания приложений для рисования? тогда было-бы наверно проще?
PM MAIL   Вверх
DigitSphinx
Дата 13.12.2007, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ты с делфи перешел?
1-цвет это и есть число
2-азы рисования МФСи :
Код

CDC::MoveTo(x, y);
CDC::LineTo(x,y);
CDC::Rectangle(……);

почитай про 
Код

CDC CBrush CPen CRgn 



Это сообщение отредактировал(а) DigitSphinx - 13.12.2007, 21:01


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
JackYF
Дата 13.12.2007, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(DigitSphinx @  13.12.2007,  21:01 Найти цитируемый пост)
азы рисования МФСи

*задумчиво* а с чего ты взял, что топикстартер имеет в виду MFC?..


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
zkv
Дата 13.12.2007, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(JackYF @  13.12.2007,  21:02 Найти цитируемый пост)
а с чего ты взял, что топикстартер имеет в виду MFC?.. 

по умолчанию в этом разделе речь идет об MFC.  smile 
PM MAIL   Вверх
DigitSphinx
Дата 13.12.2007, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(JackYF @  13.12.2007,  21:02 Найти цитируемый пост)
 а с чего ты взял, что топикстартер имеет в виду MFC?..

Цитата(zkv @  13.12.2007,  21:50 Найти цитируемый пост)
по умолчанию в этом разделе речь идет об MFC.

ну вот да  smile 

Это сообщение отредактировал(а) DigitSphinx - 13.12.2007, 23:02


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
PandaRus
Дата 13.12.2007, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Перешел с Паскаля.

Да, я понимаю, что цвет соответствует числу, сам задавал: RGB(0-255,0-255,0-255). 
Я имею ввиду - нарисовал я линию. Как сделать, чтобы заново считать цвета в различных точках линии и присвоить их переменным (какие есть операторы?)?
PM MAIL   Вверх
zkv
Дата 13.12.2007, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(PandaRus @  13.12.2007,  23:24 Найти цитируемый пост)
Как сделать, чтобы заново считать цвета в различных точках линии и присвоить их переменным (какие есть операторы?)? 

ничего не понятно.
объясни другими словами, постарайся выбирать слова, суть которых хорошо понимаешь, операторы тут не при чем.
PM MAIL   Вверх
PandaRus
Дата 13.12.2007, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нарисовал, например, я кубик, 10 на 10 пикселей. Разукрасил от белого до красного (вроде RGB(0-255,0,0)). Затем хочу чтобы элементам массива A[10][10] присвоились числа от 0 до 255, соответствующие красному спектру.
Т.е. беру верхний левый угол квадрата - если там белый пиксель, то А[0][0]=0, если красный, то = 255. И так каждый.

Это сообщение отредактировал(а) PandaRus - 13.12.2007, 23:39
PM MAIL   Вверх
JackYF
Дата 13.12.2007, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



 smile 
Цитата(zkv @  13.12.2007,  21:50 Найти цитируемый пост)
по умолчанию в этом разделе речь идет об MFC.  

DigitSphinx,
Миль пардон. Чего-то я недосмотрел... или быстро тему переместили smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
DigitSphinx
Дата 14.12.2007, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



цвет пикселя можно получить
Код

COLORREF GetPixel(
   int x,
   int y 
) const;
COLORREF GetPixel(
   POINT point 
) const;

а из COLORREF RGB можно вытащить так
 
Код

BYTE GetRValue(
  DWORD rgb   // RGB value
);
BYTE GetGValue(
  DWORD rgb     // RGB value
);

BYTE GetBValue(
  DWORD rgb     // RGB value
);


JackYF,  smile 

Это сообщение отредактировал(а) DigitSphinx - 14.12.2007, 00:16


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
PandaRus
Дата 14.12.2007, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот так что-ли:
Код

Color=GetPixel (X,Y);
A[i][j]=GetRValue(Color rgb);
?

Не, что-то не так с последней строкой? Что за DWORD?

Это сообщение отредактировал(а) PandaRus - 14.12.2007, 00:31
PM MAIL   Вверх
DigitSphinx
Дата 14.12.2007, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



DWORD т.е. 4-х байтное значение, COLORREF 4-х байтный ))
Код

typedef DWORD COLORREF;

т.е. код вот такой
Код

COLORREF color = DC.GetPixel(x, y);
A[i][j]=GetRValue(Color);




--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
PandaRus
Дата 14.12.2007, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не понял что значит DC в DC.GetPixel.


Написал так:
Код

void CSketcherView::OnDraw(CDC* pDC)
{
    CSketcherDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;
    CPen aPen;
    aPen.CreatePen(PS_SOLID,2,RGB(255,0,0));
    CPen* pOldPen=pDC->SelectObject(&aPen);
    pDC->MoveTo(50,50);
    pDC->LineTo(100,100);

    int A1;
    typedef DWORD COLORREF;
    COLORREF Color;
    Color  = GetPixel( 50, 50 );
    A1=GetRValue(Color);
}


-Ошибка - 
Error    1    error C2660: 'GetPixel' : function does not take 2 arguments    
PM MAIL   Вверх
DigitSphinx
Дата 14.12.2007, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



DC имелось ввиду CDC на которовм рисуем.
Код

COLORREF GetPixel(
  HDC hdc,    // handle to DC
  int nXPos,  // x-coordinate of pixel
  int nYPos   // y-coordinate of pixel
);

т.е. тебе еще надо туда кидать и HDC (если бы ты писал на АПИ) но поскольку ты юзаешь МФСи то надо использовать CDC::GetPixel 
т.е. функцию МФСи, твой код будет таким.
Код

void CSketcherView::OnDraw(CDC* pDC)
{
    CSketcherDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;
    CPen aPen;
    aPen.CreatePen(PS_SOLID,2,RGB(255,0,0));
    CPen* pOldPen=pDC->SelectObject(&aPen);
    pDC->MoveTo(50,50);
    pDC->LineTo(100,100);

    int A1;//лучше BYTE A1;  экономия памяти так сказать ))
    //typedef DWORD COLORREF; вот это лишнее, это уже давно за тебя сделали ))
    COLORREF Color;
    Color  = pDC->GetPixel( 50, 50 );
    A1=GetRValue(Color);

}


Это сообщение отредактировал(а) DigitSphinx - 14.12.2007, 17:54


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
PandaRus
Дата 14.12.2007, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Большое спасибо - все работает - соответствующие числа красного спектра пошли в мой файл
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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