Как разрезать битмап?
От: facelift  
Дата: 20.11.06 03:20
Оценка:
Использую ф-ии WINAPI (BitBlt...)
Re: Как разрезать битмап?
От: Alex Fedotov США  
Дата: 20.11.06 03:30
Оценка:
Здравствуйте, facelift, Вы писали:

Возьмите ножичек, ножнички, или кусочек битого стекла и разрежьте.

Вы бы рассказали поподробнее, чего хотите добиться, телепаты все в отпуске.
-- Alex Fedotov
Re[2]: Как разрезать битмап?
От: facelift  
Дата: 20.11.06 04:24
Оценка:
Здравствуйте, Alex Fedotov, Вы писали:

AF>Здравствуйте, facelift, Вы писали:


AF>Возьмите ножичек, ножнички, или кусочек битого стекла и разрежьте.


AF>Вы бы рассказали поподробнее, чего хотите добиться, телепаты все в отпуске.


Ага, значит так надо:
У нас есть битмап, мы его загружаем из файла (для ясности пусть будет так)
И потом нам его надо разрезать на Х кусков (пусть будет 2 для ясности)
Вот. Сделать эт все надо без всяких там канвасов, тока WINAPI (!)

Как сие можно реализовать?
Re[3]: Как разрезать битмап?
От: Alex Fedotov США  
Дата: 20.11.06 05:32
Оценка:
Здравствуйте, facelift, Вы писали:

F>Здравствуйте, Alex Fedotov, Вы писали:


AF>>Здравствуйте, facelift, Вы писали:


AF>>Возьмите ножичек, ножнички, или кусочек битого стекла и разрежьте.


AF>>Вы бы рассказали поподробнее, чего хотите добиться, телепаты все в отпуске.


F>Ага, значит так надо:

F>У нас есть битмап, мы его загружаем из файла (для ясности пусть будет так)
F>И потом нам его надо разрезать на Х кусков (пусть будет 2 для ясности)
F>Вот. Сделать эт все надо без всяких там канвасов, тока WINAPI (!)

F>Как сие можно реализовать?


Создать другие битмап соответствующего размера для кусков (CreateCompatibleBitmap), создаете пару memory DCs (CreateCompatibleDC), потом выбираете исходный битмап в один memory DC, а заготовку для куска — в другой. Вызываете BitBlt, там задаете правильные координаты. В конце не забываете вернуть все ресурсы на место.
-- Alex Fedotov
Re: Как разрезать битмап?
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 20.11.06 08:21
Оценка:
Здравствуйте, facelift, Вы писали:

F>Использую ф-ии WINAPI (BitBlt...)

Можно загрузить bmp в буфер (BYTE *), простым memcpy вырезать куски и вручную делать из них другие bmp. Будет быстрее.
Re[4]: Как разрезать битмап?
От: Andrew S Россия http://alchemy-lab.com
Дата: 20.11.06 08:26
Оценка:
F>>Ага, значит так надо:
F>>У нас есть битмап, мы его загружаем из файла (для ясности пусть будет так)
F>>И потом нам его надо разрезать на Х кусков (пусть будет 2 для ясности)
F>>Вот. Сделать эт все надо без всяких там канвасов, тока WINAPI (!)

F>>Как сие можно реализовать?


AF>Создать другие битмап соответствующего размера для кусков (CreateCompatibleBitmap), создаете пару memory DCs (CreateCompatibleDC), потом выбираете исходный битмап в один memory DC, а заготовку для куска — в другой. Вызываете BitBlt, там задаете правильные координаты. В конце не забываете вернуть все ресурсы на место.


Я позволил бы себе усомниться в совете создавать именно CreateCompatibleBitmap. Создавать надо DIB секцию, и загружать битмат тоже как секцию (либо, если код загрузки битмапа самописный, то для конверсии можно (и, наверное, даже лучше) использовать не BitBlt, а набор SetDIxxxx функций).

Во-первых, если не нужно выводить разрезаемый битмап на экран, то CreateCompatibleBitmap — значительно более медленный вариант (в большинстве реализаций), нежели дибсекция.
Во-вторых, формат данных, представляемых DDB, не определен (точнее определен только для одного формата — монохромной поверхности), а это значит, что для сохранения придется обратно в DIB конвертить.

В общем, DIB секция.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: Как разрезать битмап?
От: korzhik Россия  
Дата: 20.11.06 08:27
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Здравствуйте, facelift, Вы писали:


F>>Использую ф-ии WINAPI (BitBlt...)

N>Можно загрузить bmp в буфер (BYTE *), простым memcpy вырезать куски и вручную делать из них другие bmp. Будет быстрее.

Можно ещё попробовать отмапить в память (CreateFileMapping) и создать на основе этого несколько DIB секций, CreateDIBSection как раз принимает хендл отмапленного файла и смещения в нём, так что на основе отного файла можно создать несколько DIB'ов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.