CScrollView и JPG
От: Аноним  
Дата: 23.07.13 06:29
Оценка:
Здравствуйте.
Приложение архитектуры "документ-вид", представление или вид унаследован от класса CScrollView. Как организовать в SDI MFC приложении скроллинг картинок в фомате JPG? Средства GDI позволяют работать в этом контексте только с BMP.

Примерно так:
CBitmap bmpCar;
CDC     mdcCar;
    
bmpCar.LoadBitmapW(IDB_BITMAP1);
mdcCar.CreateCompatibleDC(pDC);
CBitmap *bmpOld = mdcCar.SelectObject(&bmpCar);
    
Graphics gr(mdcCar);
/*здесь какое-то рисование в gr*/
    
pDC->BitBlt(0, 0, 1000, 900, &mdcCar, 0, 0, SRCCOPY);
pDC->SelectObject(bmpOld);


Мне нужно загружать с диска файл JPG, отображать и скроллить его в окне и рисовать различные объекты на его фоне.
Спасибо.
Re: CScrollView и JPG
От: Pavel Dvorkin Россия  
Дата: 23.07.13 07:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Мне нужно загружать с диска файл JPG, отображать и скроллить его в окне и рисовать различные объекты на его фоне.


Используй GDI+
With best regards
Pavel Dvorkin
Re[2]: CScrollView и JPG
От: Аноним  
Дата: 24.07.13 06:39
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, Аноним, Вы писали:


А>>Мне нужно загружать с диска файл JPG, отображать и скроллить его в окне и рисовать различные объекты на его фоне.


PD>Используй GDI+


Спасибо. Я насчет GDI+ в курсе — просто не совсем правильно сформулировал вопрос. Трудность в том, что я не могу повторить действия, приведенные мной во фрагменте исходника, для GDI+. В GDI+ я нахожу такие классы, как Image и его родственник Bitmap, но функция BitBlt, проецирующая изображение на область представления, их не принимает и вообще относится к GDI. А если просто выводить картинку с помощью метода DrawImage класса Graphics GDI+, не работает скроллинг.
Если у вас есть примеры отображения и скроллинга картинок JPG в функционале GDI+, прошу поделиться исходником.
Re[3]: CScrollView и JPG
От: Pavel Dvorkin Россия  
Дата: 25.07.13 13:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Спасибо. Я насчет GDI+ в курсе — просто не совсем правильно сформулировал вопрос. Трудность в том, что я не могу повторить действия, приведенные мной во фрагменте исходника, для GDI+. В GDI+ я нахожу такие классы, как Image и его родственник Bitmap, но функция BitBlt, проецирующая изображение на область представления, их не принимает и вообще относится к GDI. А если просто выводить картинку с помощью метода DrawImage класса Graphics GDI+, не работает скроллинг.

А>Если у вас есть примеры отображения и скроллинга картинок JPG в функционале GDI+, прошу поделиться исходником.

Примера нет, но если уж так нужен BitBlt, то

Bitmap::GetHBITMAP Method
The GetHBITMAP method creates a Microsoft Windows Graphics Device Interface (GDI) bitmap from this Bitmap object.
With best regards
Pavel Dvorkin
Re: CScrollView и JPG
От: Аноним  
Дата: 25.07.13 14:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте.

А>Приложение архитектуры "документ-вид", представление или вид унаследован от класса CScrollView. Как организовать в SDI MFC приложении скроллинг картинок в фомате JPG? Средства GDI позволяют работать в этом контексте только с BMP.

А>Примерно так:

А>
А>CBitmap bmpCar;
А>CDC     mdcCar;
    
А>bmpCar.LoadBitmapW(IDB_BITMAP1);
А>mdcCar.CreateCompatibleDC(pDC);
А>CBitmap *bmpOld = mdcCar.SelectObject(&bmpCar);
    
А>Graphics gr(mdcCar);
А>/*здесь какое-то рисование в gr*/
    
pDC->>BitBlt(0, 0, 1000, 900, &mdcCar, 0, 0, SRCCOPY);
pDC->>SelectObject(bmpOld);
А>


А>Мне нужно загружать с диска файл JPG, отображать и скроллить его в окне и рисовать различные объекты на его фоне.

А>Спасибо.

Воспользуйся классом CImage. Он умеет и загружать и рисовать.
http://msdn.microsoft.com/ru-ru/library/5eb252d0%28v=vs.90%29.aspx
Re[4]: CScrollView и JPG
От: Аноним  
Дата: 26.07.13 09:38
Оценка:
Спасибо всем за участие.
Пока у меня получился такой код.

CBitmap bmpCar;
CDC mdcCar;
        
bmpCar.LoadBitmapW(IDB_BITMAP1);
bmpCar.SetBitmapDimension(pbitmap->GetWidth(), pbitmap->GetHeight());
mdcCar.CreateCompatibleDC(pDC);
    
CBitmap *bmpOld = mdcCar.SelectObject(&bmpCar);
    
Graphics gr(mdcCar); //создаем объект Graphics на основе имеющегося CDC
gr.DrawImage(pbitmap, 0, 0); //здесь рисуем в gr саму картинку jpg
/*далее рисуем объекты в gr на фоне jpg и выполняем BitBlt*/


Он пока не очень правильный, но скроллить jpg может. pbitmap — указатель на класс Bitmap GDI+. И далее в коде применяется BitBlt, проецирующий mdcCar в pDC, передающийся параметром в OnDraw(). Производительность получилась хуже, чем при скроллинге bmp. Возможно остановлюсь на преобразовании загружаемого jpg в bmp.
Известны ли вам хорошие книги по GDI+?
Re[5]: CScrollView и JPG
От: Pavel Dvorkin Россия  
Дата: 26.07.13 11:26
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Известны ли вам хорошие книги по GDI+?


На С++ я не знаю, но, наверное, есть. Однако можно брать любую книгу по дотнету, там тот же GDI+ (почти), так что по аналогии поймешь (если, конечно, знаешь хотя бы на примитивном уровне C#)

Ну и MSDN в помощь.
With best regards
Pavel Dvorkin
Re: CScrollView и JPG
От: Serpuh фотомер.рф
Дата: 27.07.13 05:48
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте.
А>Приложение архитектуры "документ-вид", представление или вид унаследован от класса CScrollView. Как организовать в SDI MFC приложении скроллинг картинок в фомате JPG? Средства GDI позволяют работать в этом контексте только с BMP.

Вообще мое имхо что скролинг картинок не совсем удобен для работы, много лишних движений мыши. Самое удобное, как сделано во многих графических программах, это перемещение картинок средней мышью и зум относительно мыши. Самое простое это сделать при помощи матриц трансформации, в GDI+ Status Graphics::SetTransform(IN const Matrix* matrix) Рисовать в простом CView. Инициализация GDI+ в CView тут можно найти http://www.rsdn.ru/summary/625.xml
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.