Есть 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 копирует не из моего отображения, а то, что отображено на экране.
Как сделать чтобы все-таки нарисованная картинка сохранялась??? Помогите!!!
Здравствуйте, Ujif, Вы писали:
U> Т.е. ф-я BitBlt копирует не из моего отображения, а то, что отображено на экране.
U>Как сделать чтобы все-таки нарисованная картинка сохранялась??? Помогите!!!
На первый взгляд — странно. А pDC правильный? Т.е. того View, в который рисуется.
Может тут какие особенности CScrollView... Можно попробовать все сначала рисовать в DC в памяти, а потом все копировать на экран (кстати, визуально лучше будет, если много рисуется). По крайней мере, тогда c тем. что в памяти все должно быть номально и оттуда можно сохранять.
Здравствуйте, MicVit, Вы писали:
MV>Здравствуйте, Ujif, Вы писали:
U>> Т.е. ф-я BitBlt копирует не из моего отображения, а то, что отображено на экране.
U>>Как сделать чтобы все-таки нарисованная картинка сохранялась??? Помогите!!!
MV>На первый взгляд — странно. А pDC правильный? Т.е. того View, в который рисуется.
MV>Может тут какие особенности CScrollView... Можно попробовать все сначала рисовать в DC в памяти, а потом все копировать на экран (кстати, визуально лучше будет, если много рисуется). По крайней мере, тогда c тем. что в памяти все должно быть номально и оттуда можно сохранять.
Действительно. Можно же сначала рисовать в память, а потом на экран сплевывать и сохранять картинки в jpeg тоже будет проще.
Только вот проблема, наверное: Я заранее не знаю какого размера изображение будет. Какой Bitmap создавать?