Копирование части битмапа
От: Swindler  
Дата: 07.12.06 10:06
Оценка:
Добрый день!
Необходимо скопировать часть одного 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++. Прикладные вопросы' — Кодт
Re: Копирование части битмапа
От: Andrew S Россия http://alchemy-lab.com
Дата: 07.12.06 12:50
Оценка:
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.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: Копирование части битмапа
От: Swindler  
Дата: 07.12.06 16:31
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>Указанный код создает монохромный битмап (и это в лучшем случае, ведь проверок ошибок нет вообще).


А как создать не монохромный битмап?

AS>С параметрами функции — полная неразбериха. В общем, читайте MSDN.


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