Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создать картинку, как на экране 
:(
    Опции темы
Alexsar
Дата 4.10.2005, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как создать dib-картинку(класса CDib) того, что отрисовывает OnDraw?

PM MAIL   Вверх
Earnest
Дата 4.10.2005, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Что такое CDib?
Если обертка вокруг DIBSECTION (или может быть построен из нее) , тогда так:
DIBSection нужного размера должен быть в наличии,
перегружаешь OnPaint, где создаешь compatible DC, выбираешь туда HBITMAP, полученный при создании DIB и подсовываешь контекст в OnDraw, вместо того, который пришел в OnPaint, потом еще надо скопировать из compatible DC в первоначальный.


--------------------
...
PM   Вверх
Alexsar
Дата 12.10.2005, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нет, в смысле в OnDraw есть такой код
Код

...
pDC->TextOut(10,10,"привет");
...

и прочее
как создать картинку того, что я вижу на экране, чтоб затем её сохранить?
PM MAIL   Вверх
Earnest
Дата 12.10.2005, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



И я тебе именно об этом говорю.
Чтобы получить в виде растра то, что ты рисуешь в контексте, нужно подменить контекст.

smile
Ну можешь еще кнопку Print Screen нажать.


--------------------
...
PM   Вверх
Alexsar
Дата 20.10.2005, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



TO Earnest
Если можно код, а то я что -то запутался совсем и ещё как из этого всего создать и сохранить картинку на жёстком диске, ну например формата *.bmp?
PM MAIL   Вверх
Earnest
Дата 21.10.2005, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



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

Код

class CMemDC: public CDC {

public:
   CMemDC (CDC*);
   ~CMemDC();
private:
    CBitmap  m_Bitmap;      // Offscreen bitmap
    CBitmap* m_pOldBitmap;  // bitmap originally found in CMemDC
    CDC*     m_pDC;         // Saves CDC passed in constructor
    CRect    m_rect;        // Rectangle of drawing area.
};

// constructor sets up the memory DC
inline CMemDC::CMemDC(CDC* pDC) {

   ASSERT(pDC != NULL);
   m_pDC = pDC;

   // Create a Memory DC
   pDC->GetClipBox(&m_rect);
   CreateCompatibleDC(pDC);
   m_Bitmap.CreateCompatibleBitmap(pDC,m_rect.Width(),m_rect.Height());
   m_pOldBitmap = SelectObject(&m_Bitmap);
   SetWindowOrg(m_rect.left,m_rect.top);
}

// Destructor copies the contents of the mem DC to the original DC
inline CMemDC::~CMemDC() {

   m_pDC->BitBlt(m_rect.left,m_rect.top,m_rect.Width(),m_rect.Height(),
                 this, m_rect.left, m_rect.top, SRCCOPY);
   SelectObject(m_pOldBitmap);
}


Вот пример использования:
Код

void CMyView::OnPaint() {

   CPaintDC dc(this);      // device context for painting
   CMemDC MemDC(&dc);
   OnDraw(&MemDC);
}



В данной реализации прорисовка в исходный контекст (экранный) происходит при разрушении MemDC, полученный битмап никак больше не используется. Однако он есть (CMemDC::m_Bitmap), и пока MemDC не разрушен, можно получить доступ к его содержимому.
В твоем случае, вместо Bitmap лучше использовать DibSection (см функцию CreateDIBSection)- это практически готовый bmp, с тем же выравниванием строк. Кроме того, ты сам создаешь буфер для изображения и поэтому имеешь к нему полный доступ.
Сохранение bmp-файла - это другая тема, по-моему уже обсуждавшаяся на форуме. В MSDN можно посмотреть в разделе Platform SDK\Graphics & Multimedia\Windows GDI\Bitmaps\Using bitmaps.



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


 




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


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

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