Здравствуйте.
Приложение архитектуры "документ-вид", представление или вид унаследован от класса CScrollView. Как организовать в SDI MFC приложении скроллинг картинок в фомате JPG? Средства GDI позволяют работать в этом контексте только с BMP.
Здравствуйте, Аноним, Вы писали:
А>Мне нужно загружать с диска файл 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+, прошу поделиться исходником.
Здравствуйте, Аноним, Вы писали:
А>Спасибо. Я насчет 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);
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+?
Здравствуйте, Аноним, Вы писали:
А>Известны ли вам хорошие книги по GDI+?
На С++ я не знаю, но, наверное, есть. Однако можно брать любую книгу по дотнету, там тот же GDI+ (почти), так что по аналогии поймешь (если, конечно, знаешь хотя бы на примитивном уровне C#)
Здравствуйте, Аноним, Вы писали: А>Здравствуйте. А>Приложение архитектуры "документ-вид", представление или вид унаследован от класса CScrollView. Как организовать в SDI MFC приложении скроллинг картинок в фомате JPG? Средства GDI позволяют работать в этом контексте только с BMP.
Вообще мое имхо что скролинг картинок не совсем удобен для работы, много лишних движений мыши. Самое удобное, как сделано во многих графических программах, это перемещение картинок средней мышью и зум относительно мыши. Самое простое это сделать при помощи матриц трансформации, в GDI+ Status Graphics::SetTransform(IN const Matrix* matrix) Рисовать в простом CView. Инициализация GDI+ в CView тут можно найти http://www.rsdn.ru/summary/625.xml