Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рисование и поворот bmp 
:(
    Опции темы
Toohtik
Дата 11.3.2007, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 142
Регистрация: 30.1.2006
Где: Харьков

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



Необходимо реализовать прогу для загрузки и поворота bmp т.е. открываеш рисунок, он рисуется на форме, а потом при помощи пункта меню поворачиваеш его на 90град. Путь к файлу у меня хранится в переменной char buf; Рисунок загружаю при помощи:
Код

hBitmap=LoadImage(NULL,buf,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);

А каким образом его нарисовать на форме?
PM ICQ   Вверх
neosapient
Дата 11.3.2007, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

HDC dc;
static HBITMAP bmPic;
static HDC dcPic;
switch( message )
{
    case WM_INITDIALOG:
        bmPic = LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP1)); // загрузить рисунок
        dcPic=CreateCompatibleDC(GetDC(hWnd)); // создать совместимый контекст устройства
        SelectObject(dcPic, bmPic); // склеить их
        break;   
    case WM_PAINT:
        dc = BeginPaint(hDlg, &ps);
        StretchBlt(dc,10,10,100,100,dcPic,0,0,100,100,SRCAND); // скопировать рисунок на робочий контекст устройства
        EndPaint(hDlg, &ps);
        break;         
    case WM_DESTROY :
        DeleteDC(dcPic); // освобождаем ресурсы
        DeleteObject(bmPic);
        PostQuitMessage(0);
        return 0;
}

PM MAIL   Вверх
Toohtik
Дата 11.3.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 142
Регистрация: 30.1.2006
Где: Харьков

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



Как я понимаю LoadBitmap работает только с ресурсами, а мне надо с bmp, т.е. при помощи функции GetFileName  я записываю в переменную buf путь к файлу, т.е. LoadBitmap мне не подходи.
PM ICQ   Вверх
neosapient
Дата 11.3.2007, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Это не принципиально - я сделал пример минимума необходимого для вывода рисунка на экран.
И LoadBitmap и LoadImage подгружают рисунок и возвращают HBITMAP на него.
Можешь строчку 
bmPic = LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP1)); 
заменить на
bmPic =LoadImage(NULL,buf,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
где buf путь к bmp-файлу

Вот вопрос сейчас стоит по другому: есть ли GDI функция, которая поворачивает картинку на заданый угол? а если такой стандартной нет, то как реализовать?

Вот на это и мне интерестно услышать ответ
PM MAIL   Вверх
MoZy
Дата 12.3.2007, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



neosapient, как же нет. есть!
Воть
Код

   POINT *pt = new POINT[3];

    pt[0].x = height;pt[0].y = 0;// новые координаты верхнего левого угла исходной картинки
    pt[1].x = height;pt[1].y = width;// новые координаты верхнего правого
    pt[2].x = 0;pt[2].y = 0; // новые координаты нижнего левого
    SelectObject(mkDC,TMask[1]);
    PlgBlt(DestDC,pt,SourceDC,0,0,width,height,NULL,0,0);

    delete pt;

--------------------
Experimentia est optima rerum magistra
PM MAIL WWW ICQ   Вверх
neosapient
Дата 18.3.2007, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



MoZy, вот появился вопросик по функции PlgBlt(...)

Эта функция восьмым параметром принимает маску для рисунка - что рисовать, а что нет.

Так вот если функция должна повернуть картинку на 180 градусов, то маска НЕ разворачивается.
На остальных углах всё нормально...

Как исправить?


Это сообщение отредактировал(а) neosapient - 18.3.2007, 00:39

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  DrawInDialog10.rar 37,41 Kb
PM MAIL   Вверх
MoZy
Дата 18.3.2007, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



neosapient, даже не знаю. може LoadImage с флагом LR_MONOCHROME...
у меня VC щас не стоит, отдебагить не могу. но у меня все всегда работало. помню лишь только то, что проблемы были всегда две: координаты и монохромность.
--------------------
Experimentia est optima rerum magistra
PM MAIL WWW ICQ   Вверх
neosapient
Дата 19.3.2007, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(MoZy @  18.3.2007,  19:13 Найти цитируемый пост)
neosapient, даже не знаю. може LoadImage с флагом LR_MONOCHROME...

А в каком параметре LoadImage(...)  участвует флаг LR_MONOCHROME
PM MAIL   Вверх
MoZy
Дата 19.3.2007, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



neosapient, в последнем
--------------------
Experimentia est optima rerum magistra
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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