как переконвертить Bitmap
От: Uras  
Дата: 07.04.05 13:24
Оценка:
есть DIbitmap одного формата (скажем, 24 битный)
хочется сделать bitmap другого формата, из которого можно было бы взять адрес data

я нашел два способа — оба не работают

исходная битмап лежит по адресу buffer_start, описание bi (типа BITMAPINFO)

через DDB

hbmp=CreateCompatibleBitmap(dc->m_hDC,nx,ny);
SetDIBits(NULL,hbmp,0,100,buffer_start,&bi,DIB_RGB_COLORS);

bmp=CBitmap::FromHandle(hbmp);
bmp->GetBitmap(&binfo);

после этого поле binfo.bmDits== 0x00000000

через DIB

bits = new char[nx*ny*4];

hbmp=CreateBitmap(fr->row_pixels,fr->row_count,1,24,bits);
SetDIBits(NULL,hbmp,0,100,buffer_start,&bi,DIB_RGB_COLORS);

— в этой версии не выполняется функция SetDIBits (и вроде не должна)

Как быть — очень хочется чтоб работало быстро и без лишних копирований битмапа
Re: как переконвертить Bitmap
От: Денис Майдыковский Россия http://www.maydyk.com
Дата: 07.04.05 19:46
Оценка:
Здравствуйте, Uras, Вы писали:

U>есть DIbitmap одного формата (скажем, 24 битный)

U>хочется сделать bitmap другого формата, из которого можно было бы взять адрес data

Лучше всего руками Не так уж там много возможных преобразований. Зато будут быстро работать.
Чепез DC можно так:
1) Создать 2 DC в памяти через CreateCompatibleDC.
2) Создать пустой битмап требуемого формата через CreateDIBSection и выбрать его в один контекст устойства.
3) Исходный битмап выбрать во второй контекст
4) BitBlt из второго контекста в первый.
5) Освободить оба битмапа: вот быты и готовы

P.S. Если что напутал, извини 12 часов сегодня работал.
Re[2]: как переконвертить Bitmap
От: Uras  
Дата: 08.04.05 07:19
Оценка:
Здравствуйте, Денис Майдыковский, Вы писали:


ДМ>Лучше всего руками Не так уж там много возможных преобразований. Зато будут быстро работать.

ДМ>Чепез DC можно так:
ДМ>1) Создать 2 DC в памяти через CreateCompatibleDC.
ДМ>2) Создать пустой битмап требуемого формата через CreateDIBSection и выбрать его в один контекст устойства.
ДМ>3) Исходный битмап выбрать во второй контекст
ДМ>4) BitBlt из второго контекста в первый.
ДМ>5) Освободить оба битмапа: вот быты и готовы

как утверждает MSDN и как показывает практика, одновременно в системе только один битмап может быть выбран в контекст, даже если контексты разные
Re[3]: как переконвертить Bitmap
От: Аноним  
Дата: 08.04.05 09:09
Оценка:
Здравствуйте, Uras, Вы писали:

U>Здравствуйте, Денис Майдыковский, Вы писали:



ДМ>>Лучше всего руками Не так уж там много возможных преобразований. Зато будут быстро работать.

ДМ>>Чепез DC можно так:
ДМ>>1) Создать 2 DC в памяти через CreateCompatibleDC.
ДМ>>2) Создать пустой битмап требуемого формата через CreateDIBSection и выбрать его в один контекст устойства.
ДМ>>3) Исходный битмап выбрать во второй контекст
ДМ>>4) BitBlt из второго контекста в первый.
ДМ>>5) Освободить оба битмапа: вот быты и готовы

U>как утверждает MSDN и как показывает практика, одновременно в системе только один битмап может быть выбран в контекст, даже если контексты разные


Да ну.... и где такаяфигня написана??? Дайте пожалуйста ссылочку. Сколько лет программировал, а такое первый раз слышу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.