Здравствуйте, Alex Fedotov, Вы писали:
AF>Здравствуйте, facelift, Вы писали:
AF>Возьмите ножичек, ножнички, или кусочек битого стекла и разрежьте.
AF>Вы бы рассказали поподробнее, чего хотите добиться, телепаты все в отпуске.
Ага, значит так надо:
У нас есть битмап, мы его загружаем из файла (для ясности пусть будет так)
И потом нам его надо разрезать на Х кусков (пусть будет 2 для ясности)
Вот. Сделать эт все надо без всяких там канвасов, тока WINAPI (!)
Здравствуйте, facelift, Вы писали:
F>Здравствуйте, Alex Fedotov, Вы писали:
AF>>Здравствуйте, facelift, Вы писали:
AF>>Возьмите ножичек, ножнички, или кусочек битого стекла и разрежьте.
AF>>Вы бы рассказали поподробнее, чего хотите добиться, телепаты все в отпуске.
F>Ага, значит так надо: F>У нас есть битмап, мы его загружаем из файла (для ясности пусть будет так) F>И потом нам его надо разрезать на Х кусков (пусть будет 2 для ясности) F>Вот. Сделать эт все надо без всяких там канвасов, тока WINAPI (!)
F>Как сие можно реализовать?
Создать другие битмап соответствующего размера для кусков (CreateCompatibleBitmap), создаете пару memory DCs (CreateCompatibleDC), потом выбираете исходный битмап в один memory DC, а заготовку для куска — в другой. Вызываете BitBlt, там задаете правильные координаты. В конце не забываете вернуть все ресурсы на место.
Здравствуйте, facelift, Вы писали:
F>Использую ф-ии WINAPI (BitBlt...)
Можно загрузить bmp в буфер (BYTE *), простым memcpy вырезать куски и вручную делать из них другие bmp. Будет быстрее.
F>>Ага, значит так надо: F>>У нас есть битмап, мы его загружаем из файла (для ясности пусть будет так) F>>И потом нам его надо разрезать на Х кусков (пусть будет 2 для ясности) F>>Вот. Сделать эт все надо без всяких там канвасов, тока WINAPI (!)
F>>Как сие можно реализовать?
AF>Создать другие битмап соответствующего размера для кусков (CreateCompatibleBitmap), создаете пару memory DCs (CreateCompatibleDC), потом выбираете исходный битмап в один memory DC, а заготовку для куска — в другой. Вызываете BitBlt, там задаете правильные координаты. В конце не забываете вернуть все ресурсы на место.
Я позволил бы себе усомниться в совете создавать именно CreateCompatibleBitmap. Создавать надо DIB секцию, и загружать битмат тоже как секцию (либо, если код загрузки битмапа самописный, то для конверсии можно (и, наверное, даже лучше) использовать не BitBlt, а набор SetDIxxxx функций).
Во-первых, если не нужно выводить разрезаемый битмап на экран, то CreateCompatibleBitmap — значительно более медленный вариант (в большинстве реализаций), нежели дибсекция.
Во-вторых, формат данных, представляемых DDB, не определен (точнее определен только для одного формата — монохромной поверхности), а это значит, что для сохранения придется обратно в DIB конвертить.
Здравствуйте, Nuzhny, Вы писали:
N>Здравствуйте, facelift, Вы писали:
F>>Использую ф-ии WINAPI (BitBlt...) N>Можно загрузить bmp в буфер (BYTE *), простым memcpy вырезать куски и вручную делать из них другие bmp. Будет быстрее.
Можно ещё попробовать отмапить в память (CreateFileMapping) и создать на основе этого несколько DIB секций, CreateDIBSection как раз принимает хендл отмапленного файла и смещения в нём, так что на основе отного файла можно создать несколько DIB'ов