Я создаю приложение MFC c ++, в котором я позволяю пользователю читать изображение, рисовать на нем линии, а затем сохранять его.
поэтому у меня есть объект «CImage», который называется «Image», в который пользователь загружает изображение.
и у меня есть объект контекста устройства, и я смог нарисовать линии на нем
объект контекста устройства, который во время выполнения с использованием обработчиков событий «OnLButtonDown» и «OnLButtonUp».
Затем я позволяю пользователю сохранить изображение, используя «CImage.save». Изображение сохранено, но в контексте устройства нет нарисованных линий, чего и следовало ожидать.
но я хочу, чтобы они появились в сохраненном изображении ..
Вопрос заключается в том, как я могу получить объект контекста устройства, чтобы повлиять на мой объект CImage?
это обработчик события для нажатия кнопки мыши
void CProFilterDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
curser =point;
if (draw && Boundry.PtInRect(point) )
{
CDialogEx::OnLButtonDown(nFlags, point);
}
}
и этот, когда кнопка мыши нажата
void CProFilterDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
if (draw && Boundry.PtInRect(curser) && Boundry.PtInRect(point))
{
CClientDC dc(this);
dc.MoveTo(curser);
dc.LineTo(point);
CDialogEx::OnLButtonUp(nFlags, point);
}}
это где я загружаю свой объект Cimage
void CProFilterDlg::OnBnClickedBtnBrowse()
{
CFileDialog Browse(true);
if(Browse.DoModal() == IDOK)
{
ImagePath = Browse.GetPathName();
}
image.Load(ImagePath);
}
и это где я сохраняю мой CImage
void CProFilterDlg::OnBnClickedSave()
{
CFileDialog Save(true);
if(Save.DoModal() == IDOK)
{
ImagePath = Save.GetPathName();
}
image.Save(ImagePath,Gdiplus::ImageFormatBMP);
}
Судя по тому, что вы показали, вы используете не тот DC. Вы, кажется, используете DC для диалога (т.е. CCLientDC) и не фактический CImage. Вы должны строить DC из
Этот DC будет иметь текущее выбранное растровое изображение.
Вы ищете CImage: BitBlt? Он используется для копирования растрового изображения из исходного контекста устройства в текущий контекст устройства.