Как сохранить scroll экран в виде картинки???
От: Ujif  
Дата: 12.07.04 13:21
Оценка:
Есть SDI приложение. Класс отображения наследуется от CScroll. В OnDraw рисуется "что-то". Этого "чего-то" много. Естественно, делается вертикальная полоса прокрутки. Возникла задача сохранить все это "что-то" в виде картинки.
Делаю так:

CDC *pDC;
pDC=GetDC();
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap cbm,*oldcbm;
cbm.CreateCompatibleBitmap(pDC,docSz.cx,PageSizes[TotalPages]);
oldcbm=memDC.SelectObject(&cbm);
memDC.BitBlt(0,0,width,height,pDC,0,0,SRCCOPY);
CImage myImg;
myImg.Attach((HBITMAP)cbm);
myImg.Save("C:\\123.jpeg",Gdiplus::ImageFormatJPEG);
memDC.SelectObject(oldcbm);
memDC.DeleteDC();

В итоге получаю что у меня в jpegовской картинке сохраняется кусочек требуемой картинки + кусок десктопа. Т.е. ф-я BitBlt копирует не из моего отображения, а то, что отображено на экране.

Как сделать чтобы все-таки нарисованная картинка сохранялась??? Помогите!!!
Re: Как сохранить scroll экран в виде картинки???
От: MicVit  
Дата: 12.07.04 13:48
Оценка:
Здравствуйте, Ujif, Вы писали:

U> Т.е. ф-я BitBlt копирует не из моего отображения, а то, что отображено на экране.


U>Как сделать чтобы все-таки нарисованная картинка сохранялась??? Помогите!!!



На первый взгляд — странно. А pDC правильный? Т.е. того View, в который рисуется.

Может тут какие особенности CScrollView... Можно попробовать все сначала рисовать в DC в памяти, а потом все копировать на экран (кстати, визуально лучше будет, если много рисуется). По крайней мере, тогда c тем. что в памяти все должно быть номально и оттуда можно сохранять.
Re[2]: Как сохранить scroll экран в виде картинки???
От: Ujif  
Дата: 12.07.04 14:02
Оценка:
Здравствуйте, MicVit, Вы писали:

MV>Здравствуйте, Ujif, Вы писали:


U>> Т.е. ф-я BitBlt копирует не из моего отображения, а то, что отображено на экране.


U>>Как сделать чтобы все-таки нарисованная картинка сохранялась??? Помогите!!!



MV>На первый взгляд — странно. А pDC правильный? Т.е. того View, в который рисуется.


MV>Может тут какие особенности CScrollView... Можно попробовать все сначала рисовать в DC в памяти, а потом все копировать на экран (кстати, визуально лучше будет, если много рисуется). По крайней мере, тогда c тем. что в памяти все должно быть номально и оттуда можно сохранять.



Действительно. Можно же сначала рисовать в память, а потом на экран сплевывать и сохранять картинки в jpeg тоже будет проще.

Только вот проблема, наверное: Я заранее не знаю какого размера изображение будет. Какой Bitmap создавать?
Re[3]: Как сохранить scroll экран в виде картинки???
От: MicVit  
Дата: 12.07.04 14:23
Оценка:
Здравствуйте, Ujif, Вы писали:

U>Только вот проблема, наверное: Я заранее не знаю какого размера изображение будет. Какой Bitmap создавать?


Ну может пересоздавать битмап, по мере необходимости изменения размера. Вроде не очень сложно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.