Сейчас на форуме: hgdagon, asfa, bartolomeo (+4 невидимых)

 eXeL@B —› Программирование —› Простая графика на асме
. 1 . 2 . >>
Посл.ответ Сообщение


Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 19 апреля 2007 15:25
· Личное сообщение · #1

Привет всем. Вопрос новичка! Как нарисовать на форме простую бмп ? Делал так:

invoke BeginPaint,hwnd,ADDR ps
mov hdc,EAX
invoke ImageList_Create,149,102,ILC_COLOR16,0,0
mov hImList,EAX
invoke LoadBitmap,hInstance,IM_WAIT
mov hBmp,EAX
invoke ImageList_Add,hImList,hBmp,NULL
invoke ImageList_Draw,hImList,0,hdc,8,179,ILD_NORMAL
invoke DeleteObject,hBmp
invoke EndPaint,hwnd, ADDR ps
invoke SendMessage,hwnd,WM_PAINT,0,0


не прорисовывает почему то.. Смотрел в отладчике: вроде все ф-ии возвращают валидные значения, но.. Неужели Image_List можно использовать только для контролов? Но ведь написано:
"The ImageList_Draw function draws an image list item in the specified device context."
Помогите понять ошибку!

-----
radio uno in ibisa ...





Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 19 апреля 2007 16:01
· Личное сообщение · #2

InitResources proc

invoke BitmapFromResource, hInstance, 9999 ; background
mov hBitmapBG, eax

invoke GetDC, hWND
mov hDC_Main, eax
invoke CreateCompatibleDC, hDC_Main
mov hDC_BG, eax
invoke SelectObject, hDC_BG, hBitmapBG

ret
InitResources endp

PaintProc proc
LOCAL hDC :DWORD
LOCAL ps :PAINTSTRUCT

invoke BeginPaint,hWND,ADDR ps
mov hDC, eax

invoke BitBlt, hDC, 0, 0, WND_WIDTH, WND_HEIGHT, hDC_BG, 0, 0, SRCCOPY

invoke EndPaint,hWND,ADDR ps
ret
PaintProc endp


-----
Тут не могла быть ваша реклама





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 19 апреля 2007 17:07
· Личное сообщение · #3

lord_Phoenix
invoke BitmapFromResource, hInstance, 9999 ; background
hInstance чего здесь должен быть? Может у меня в этом и ошибка.. Я указывал на Instance окна..
Хотя написано:
; get a resource handle (address) and resource length from the executable
invoke FindResource, hModule, ResNumber, ADDR szImage
значит правильно.. ?

-----
radio uno in ibisa ...





Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 19 апреля 2007 17:21
· Личное сообщение · #4

Icelot
invoke GetModuleHandle, NULL
mov hInstance, eax


-----
Тут не могла быть ваша реклама





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 19 апреля 2007 17:33
· Личное сообщение · #5

Да, с hInstance разобрался, всё правильно было. Беда вот где:
FindResource возвращает ноль:

00401232 |. 68 56314000 PUSH SerFile.00403156 ; /ResourceType = "IMAGE"
00401237 |. FF75 0C PUSH DWORD PTR SS:[EBP+C] ; |ResourceName = FA6
0040123A |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hModule = 00400000 (SerFile)
0040123D |. E8 DC060000 CALL <JMP.&kernel32.FindResourceA> ; \FindResourceA

FA6 = 4006 = номер картинки. Картинка в ресурсе есть.. Остальные параметры тоже правильные. Не пойму че не так..

-----
radio uno in ibisa ...





Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 19 апреля 2007 17:35
· Личное сообщение · #6

тип ресурса такой? last_error какой?

-----
Тут не могла быть ваша реклама





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 19 апреля 2007 17:54 · Поправил: Icelot
· Личное сообщение · #7

lord_Phoenix пишет:
last_error какой?

RESOURCE_TYPE_NOT_FOUND
ты прав в ресурсном файле было BITMAP - исправил на IMAGE. FindResource отработала.
Но картинки всё равно нету
Посмотрел дальше.. SelectObject выдаёт 0 в EAX. Так и должно быть? Извиняюсь, просто msdn нету под рукой..
А winapi_rus.hlp Виста не хочет открывать. Устарел длшя неё формат....

-----
radio uno in ibisa ...




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 19 апреля 2007 17:57
· Личное сообщение · #8

Icelot пишет:
Картинка в ресурсе есть..

А редакторы ресурсов её видят?

-----
Всем привет, я вернулся





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 19 апреля 2007 18:06
· Личное сообщение · #9

Bitfry да!
IMAGE
- 4006
- 1033

-----
radio uno in ibisa ...





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 19 апреля 2007 18:19
· Личное сообщение · #10

the return value is a handle to the object being replaced.
значит SelectObject.. Сейчас будем разбираться

-----
radio uno in ibisa ...





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 19 апреля 2007 18:29 · Поправил: Icelot
· Личное сообщение · #11

[deleted] - поторопился..
BitmapFromResource в свою очередь вызывает BitmapFromMemory та еще +3 доп. ф-ии... Кое-как сделал вроде, но компилятор Unresolved external symbol Что это значит?

-----
radio uno in ibisa ...




Ранг: 39.2 (посетитель), 16thx
Активность: 0.020
Статус: Участник

Создано: 19 апреля 2007 19:25
· Личное сообщение · #12

Попробуй добавить:
include c:\masm32\include\oleaut32.inc
include c:\masm32\include\ole32.inc

includelib c:\masm32\lib\oleaut32.lib
includelib c:\masm32\lib\ole32.lib




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 19 апреля 2007 20:20
· Личное сообщение · #13

bbuc спасибо эти уже добавил. Только картинки нету. Пойду повешусь.....

-----
radio uno in ibisa ...





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 19 апреля 2007 20:58
· Личное сообщение · #14

Что ж.. похоже, что даже простая графика на асме - это не просто.. Может есть у кого-нибудь рабочие примеры с сорцами? Или литература по теме? Буду очень признателен!

-----
radio uno in ibisa ...





Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 20 апреля 2007 07:28
· Личное сообщение · #15

прямо с масмом примеры идут, глянь их

-----
Тут не могла быть ваша реклама





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 20 апреля 2007 07:35 · Поправил: Icelot
· Личное сообщение · #16

lord_Phoenix спасибо! В масме есть пример:
masm32\examples\exampl08\car - это то, что нужно.
Нарисовалась =)))

-----
radio uno in ibisa ...




Ранг: 7.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 апреля 2007 07:52
· Личное сообщение · #17

Icelot
могу дать на фасме сорец как грузить jpeg с помощью OleLoadPicture а про масм забудьте ибо не интересно




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 20 апреля 2007 07:54
· Личное сообщение · #18

Ke Kwan
выкладывай если можешь. А что в масме не интересно?

-----
radio uno in ibisa ...





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 20 апреля 2007 11:44
· Личное сообщение · #19

Продолжение темы.. Если картинки разные и прорисовывать их надо несколько раз. Как правильно обновить прямоугольник? Картинка обновляется если прямоугольник с ней окажется в невидимой области или программу свернуть - развернуть. Т.е. он становится invalidate, как я понимаю?
Пробовал RedrawWindow может параметры не те, но не обновляет.

-----
radio uno in ibisa ...




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 20 апреля 2007 12:07
· Личное сообщение · #20

Icelot пишет:
Как правильно обновить прямоугольник?

Например вызвать Invalidaterect (урок 4 Айсилона).

-----
Всем привет, я вернулся





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 20 апреля 2007 12:16 · Поправил: Icelot
· Личное сообщение · #21

Bitfry пишет:
Например вызвать Invalidaterect

Это первое, что я попробовал.
Invalidaterect и UpdateWindow посылают окну сообщение WM_PAINT в котором и происходит прорисовка картинки. Не помогает.

added:
Разобрался. Просто сам наворочил много, вот и запутался. InvalidateRect.

-----
radio uno in ibisa ...




Ранг: 7.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 апреля 2007 18:26
· Личное сообщение · #22

Вот пример на фасм для загрузки JPEG и я не юзаю прорисовку через WM_PAINT а просто ассоциирую STATIC с нужным битмапом. Так проще) Данный пример может (не проверял но должен) грузить еще BMP, GIF, ICO, WMF, и EMF картинки и отрисовывать их.

51b1_20.04.2007_CRACKLAB.rU.tgz - JPEG.rar



Ранг: 7.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 апреля 2007 18:28
· Личное сообщение · #23

Bitfry пишет:
Например вызвать Invalidaterect (урок 4 Айсилона).


это очень противно может мигать. лучше рисовать все на невидимом контексте а потом копировать его через блиттинг на форму.




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 20 апреля 2007 22:24
· Личное сообщение · #24

Ke Kwan пишет:
а потом копировать его через блиттинг

сказанул.. Я ни фига не понял Чуть подробнее можешь? Или инфу какую посоветуешь?

-----
radio uno in ibisa ...





Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 20 апреля 2007 22:31
· Личное сообщение · #25

Icelot
BitBlt, как у меня

-----
Тут не могла быть ваша реклама





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 20 апреля 2007 22:59
· Личное сообщение · #26

lord_Phoenix пишет:
BitBlt, как у меня

А Глянул пример КеКвана. Имхо ассоциировать с контролом конечно можно, но.. не знаю.. По мне так лучше прорисовать. Хотя конечно с нынешеими мощными компами такие мелочи уже не имеют значения. Просто я изучаю асм на лету т.с. Пишу и решаю возникшие проблемы. Хочется докопаться до всего. Вот завтра буду смотреть, как BitBlt работает (суть ясна, но не помешает).
Кстати если тема интересна не только мне вот http://www.wasm.ru/srclist.php?list=3 исходники с васма. Оч много полезного

-----
radio uno in ibisa ...




Ранг: 7.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 апреля 2007 23:15
· Личное сообщение · #27

вот что то захотелось сделать на из jpeg'ов кино :D

часть 1

6c07_20.04.2007_CRACKLAB.rU.tgz - JPEGANIM.part1.rar



Ранг: 7.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 апреля 2007 23:16
· Личное сообщение · #28

часть 2

9faa_20.04.2007_CRACKLAB.rU.tgz - JPEGANIM.part2.rar



Ранг: 7.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 апреля 2007 23:19
· Личное сообщение · #29

Icelot пишет:
Имхо ассоциировать с контролом конечно можно, но.. не знаю.


зачем обрабатывать WM_PAINT если за тебя это может сделать система? если тока, как вариант, отрисовывать в отдельном потоке...




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 21 апреля 2007 06:52
· Личное сообщение · #30

Ke Kwan не плохо, мне понравилось

-----
radio uno in ibisa ...



. 1 . 2 . >>
 eXeL@B —› Программирование —› Простая графика на асме
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати