Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с BMP рисунком.  (Прочитано 20791 раз)
0 Пользователей и 13 Гостей смотрят эту тему.
wr_vu
Интересующийся

ua
Offline Offline

« : 30-09-2010 08:02 » 

Имеется задний фон 

Мне нужно нарисовать на доске фигуру по ее образу без квадрата заливки, по маске на белом фоне, которая также имееться

Подскажите пожалуйста, какие API -функции я должен изпользовать что бы выглядело не так:
,
а вот так:

программирую на Ассемблер.
С уважением Юрий.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 30-09-2010 08:09 » 

функция АПИ - BitBlt

http://msdn.microsoft.com/en-us/library/dd183370(VS.85).aspx
« Последнее редактирование: 30-09-2010 08:13 от Алексей1153++ » Записан

wr_vu
Интересующийся

ua
Offline Offline

« Ответ #2 : 30-09-2010 08:22 » 

К сожалению, эта функция прорисовывает фигуру в белом квадрате, я уже ее пробовал.  Получаеться вот так

 Здесь была моя ладья...
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 30-09-2010 08:32 » 

покажи код, как вызывал
Записан

wr_vu
Интересующийся

ua
Offline Offline

« Ответ #4 : 30-09-2010 08:45 » 

@call LoadBitmapA,hInst,FIGURA
mov hBmp,eax
@call SelectObject,hDCbmp,eax
mov hSelect,eax
@call BitBlt,hPaint,23,23,80,80,hDCbmp,BitX,BitY,SRCCOPY
@call SelectObject,hDCbmp,hSelect
@call DeleteObject,hBmp
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 30-09-2010 08:50 » 

ну все правильно функция работает

надо иметь внешний цвет отличающийся от внутренних хотя бы на один бит, и менять его на бекграунд
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
wr_vu
Интересующийся

ua
Offline Offline

« Ответ #6 : 30-09-2010 08:52 » 

@call BeginPaint,hWnd,offset pPaint
    mov hPaint,eax

    @call CreateCompatibleDC,hPaint
    mov hDCbmp,eax
    @call LoadBitmapA,hInst,CHESS0  -  загружаю БМП доски
    mov hBmp,eax
    @call SelectObject,hDCbmp,eax    - выделяю объект
    mov hSelect,eax
    @call BitBlt,hPaint,0,0,708,708,hDCbmp,BitX,BitY,SRCCOPY - рисую доску
    @call SelectObject,hDCbmp,hSelect
    @call DeleteObject,hBmp    - удаляю объект доски

    @call LoadBitmapA,hInst,FIGURA  - загружаю БМП фигуры
    mov hBmp,eax
    @call SelectObject,hDCbmp,eax  - выделяю объект
    mov hSelect,eax
    @call BitBlt,hPaint,23,23,80,80,hDCbmp,BitX,BitY,SRCCOPY - рисую фигуру
    @call SelectObject,hDCbmp,hSelect
    @call DeleteObject,hBmp   - удаляю объект
    @call EndPaint,hWnd,offset pPaint
Записан
wr_vu
Интересующийся

ua
Offline Offline

« Ответ #7 : 30-09-2010 08:57 » 

Получаеться вот что:
Записан
wr_vu
Интересующийся

ua
Offline Offline

« Ответ #8 : 30-09-2010 08:59 » 

Как можно прорисовать фигуру без белого квадрата? Желательно примером...  Здесь была моя ладья...
Записан
wr_vu
Интересующийся

ua
Offline Offline

« Ответ #9 : 30-09-2010 09:11 » 

Возможно я долен использовать функцию "MaskBlt" я пробовал, но не имею понятия как указать маску...
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 30-09-2010 09:20 » 

флаг  SRCCOPY выбран неверно. Нужно:

1) сначала очистить место под фигуру (маска + SRCAND)
2) потом положить фигуру (фигура + SRCPAINT)

не отлаживал )


загружать в память каждый раз фигуру - тоже некузяво, загрузи при инициализации, а выгружай при завершении программы
« Последнее редактирование: 30-09-2010 09:23 от Алексей1153++ » Записан

wr_vu
Интересующийся

ua
Offline Offline

« Ответ #11 : 30-09-2010 09:38 » 

Не получаеться так как надо, но если сделать вот так:
@call BitBlt,hPaint,23,23,80,80,hDCbmp,BitX,160,SRCAND
@call BitBlt,hPaint,23,23,80,80,hDCbmp,BitX,BitY,MERGEPAINT

то получаеться вот что: 


только нужно цвета наоборот поменять, тоесть обводка черная, заливка белая. А оно на оборот получилось.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 30-09-2010 09:47 » 

потому что

MERGEPAINT Merges the colors of the inverted source rectangle with the colors of the destination rectangle by using the Boolean OR operator.
 
всё же SRCPAINT больше подходит. Странно, что не получается


кстати,

//в hDCbmp- маска
@call BitBlt,hPaint,23,23,80,80,hDCbmp,0,maskY,SRCAND

//в hDCbmp- фигура
@call BitBlt,hPaint,23,23,80,80,hDCbmp,0,figrY,SRCPAINT


ты в таком порядке делал ?
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 30-09-2010 09:50 » 

всё, до меня дошло ))

вокруг фигуры должно быть не белое, а чёрное. Тогда SRCPAINT - как раз


* chess.PNG (1.9 Кб - загружено 1775 раз.)
« Последнее редактирование: 30-09-2010 09:52 от Алексей1153++ » Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #14 : 30-09-2010 09:52 » new

Лёш, если мне не изменяет память, я где-то про ROP коды уже чего-то писАл. Не помнишь где?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 30-09-2010 09:55 » 

а вот же https://forum.shelek.ru/index.php/topic,620.0.html
Записан

wr_vu
Интересующийся

ua
Offline Offline

« Ответ #16 : 30-09-2010 10:47 » 

//в hDCbmp- маска
@call BitBlt,hPaint,23,23,80,80,hDCbmp,0,maskY,SRCAND

//в hDCbmp- фигура
@call BitBlt,hPaint,23,23,80,80,hDCbmp,0,figrY,SRCPAINT

делал в таком порядке...

Сейчас попробую последний вариант...
Записан
wr_vu
Интересующийся

ua
Offline Offline

« Ответ #17 : 30-09-2010 10:53 » 

Да вариант работает, спасибо за помощь. Загружа буду конечно при иннициализации, это я просто тестировал прорисовку...  Улыбаюсь
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #18 : 30-09-2010 12:14 » 

О! Так вот же ROP-код для маски - 0x00B8074A. Чего вы там ещё ищите?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
wr_vu
Интересующийся

ua
Offline Offline

« Ответ #19 : 30-09-2010 12:46 » 

Можно пример с функцией и этим РОП-кодом?  Здесь была моя ладья...
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #20 : 30-09-2010 15:39 » 

wr_vu, в #15 Лёшка привёл ссылку. Почитай, как эти ROP коды получаются. Там же и примеры есть. Правда на С++. Но я думаю ты разберёшься. В конечном итоге SRCPAINT, SRCAND и пр. ничто иное как эти самые коды и есть. Может сам сделаешь такой, как тебе нужен.
« Последнее редактирование: 06-10-2010 07:14 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines