Добрый день!
Необходимо скопировать часть одного CBitmap в другой CBitmap
Создал тестовый пример:
//m_bmp - битмап, откуда копируем
//m_partbmp -куда копируем
SIZE m_size;
m_bmp.GetSize(m_size); HDC dc;
dc = ::CreateCompatibleDC(0);
m_partbmp.CreateCompatibleBitmap ( dc, m_size.cx/3, m_size.cy/2 ) ;
CopyBitmap(m_bmp,0,0,m_size.cx/3, m_size.cy/2,m_partbmp,0,0);
HWND h_bmp = ::GetDlgItem(m_hWnd,IDC_BMP2);
::SendMessage(h_bmp, STM_SETIMAGE,0,(LPARAM)m_partbmp.m_hBitmap);
При этом функция копирования определена так:
void CTestDlg::CopyBitmap(CBitmap& src, int x_src, int y_src, int width, int height, CBitmap& dst, int x_dst, int y_dst)
{
CDC memDC,DC;
memDC.CreateCompatibleDC(0);
DC.CreateCompatibleDC(0);
memDC.SelectBitmap(src.m_hBitmap);
DC.SelectBitmap(dst.m_hBitmap);
DC.BitBlt(x_src,y_src,width,height,memDC,0,0,SRCCOPY);
}
При этом битмапа, в которую копирую остаеться черной, но в ней присутствуют те элементы, которые были в исходной части не зарисованы.
07.12.06 17:56: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
S>Добрый день!
S>Необходимо скопировать часть одного CBitmap в другой CBitmap
S>Создал тестовый пример:
S>
S> //m_bmp - битмап, откуда копируем
S> //m_partbmp -куда копируем
S> SIZE m_size;
S> m_bmp.GetSize(m_size); HDC dc;
S> dc = ::CreateCompatibleDC(0);
S> m_partbmp.CreateCompatibleBitmap ( dc, m_size.cx/3, m_size.cy/2 ) ;
S> CopyBitmap(m_bmp,0,0,m_size.cx/3, m_size.cy/2,m_partbmp,0,0);
S> HWND h_bmp = ::GetDlgItem(m_hWnd,IDC_BMP2);
S> ::SendMessage(h_bmp, STM_SETIMAGE,0,(LPARAM)m_partbmp.m_hBitmap);
S>
Указанный код создает монохромный битмап (и это в лучшем случае, ведь проверок ошибок нет вообще).
S>При этом функция копирования определена так:
S>
S>void CTestDlg::CopyBitmap(CBitmap& src, int x_src, int y_src, int width, int height, CBitmap& dst, int x_dst, int y_dst)
S>{
S> CDC memDC,DC;
S> memDC.CreateCompatibleDC(0);
S> DC.CreateCompatibleDC(0);
S> memDC.SelectBitmap(src.m_hBitmap);
S> DC.SelectBitmap(dst.m_hBitmap);
S> DC.BitBlt(x_src,y_src,width,height,memDC,0,0,SRCCOPY);
S>}
S>
С параметрами функции — полная неразбериха. В общем, читайте MSDN.