Вывод битмапа

Тема в разделе "WASM.WIN32", создана пользователем RedScorpion, 8 апр 2006.

  1. RedScorpion

    RedScorpion New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2006
    Сообщения:
    4
    Задача: прочитанный из файла битмап вывести на десктоп.

    Среда: masm v7.



    ВОПРОС: ПОЧЕМУ ВЫДАЕТ ОШИБКУ SelectObject,mDC,mBM? (остальное выполняется нормально)



    Исходник:


    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6. include \masm32\include\kernel32.inc
    7. include \masm32\include\user32.inc
    8. include \masm32\include\gdi32.inc
    9. includelib \masm32\lib\kernel32.lib
    10. includelib \masm32\lib\user32.lib
    11. includelib \masm32\lib\gdi32.lib
    12.  
    13. .data
    14. fName db 'pilot.bmp',0
    15.  
    16. .data?
    17. hdc dd ?
    18. fHan dd ?
    19. fSiz dd ?
    20. memP dd ?
    21. mDC dd ?
    22. mBM dd ?
    23.  
    24. .code
    25. start:
    26. invoke _lopen,addr fName,OF_READ
    27. mov fHan,eax
    28. invoke GetFileSize,fHan,0
    29. mov fSiz,eax
    30. invoke GlobalAlloc,0,fSiz
    31. mov memP,eax
    32. invoke _lread,fHan,memP,fSiz
    33. invoke CloseHandle,fHan
    34.  
    35. invoke GetDC,0
    36. mov hdc,eax
    37. invoke CreateCompatibleDC,hdc
    38. mov mDC,eax
    39.  
    40. push esi
    41. mov esi,[memP]
    42. add esi,[esi+10]
    43. push esi ;Bits
    44. mov esi,[memP]
    45. xor eax,eax
    46. mov ax,word ptr [esi+28] ;BitCount
    47. push eax
    48. mov ax,word ptr [esi+26] ;Planes
    49. push eax
    50. push [esi+22] ;Height
    51. push [esi+18] ;Width
    52. call CreateBitmap
    53. mov mBM,eax
    54. pop esi
    55.  
    56. invoke SelectObject,mDC,mBM
    57.  
    58. invoke BitBlt,hdc,0,0,63,71,mDC,0,0,SRCCOPY
    59.  
    60.  
    61. invoke DeleteObject,mBM
    62. invoke DeleteDC,mDC
    63. invoke ReleaseDC,0,hdc
    64. invoke GlobalFree,memP
    65. invoke ExitProcess,0
    66. end start
     
  2. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    CreateCompatibleBitmap
     
  3. RedScorpion

    RedScorpion New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2006
    Сообщения:
    4
    Дык как тогда присоеденить битмап из файла?
     
  4. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    LoadImage(...LR_LOADFROMFILE)

    GetObject (получишь размеры битмапа)

    CreateCompatibleDC

    SelectObject

    mov hObjOld,eax

    BitBlt

    SelectObject,... hObjOld

    ...
     
  5. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    SetDIBits

    SetDIBitsToDevice
     
  6. RedScorpion

    RedScorpion New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2006
    Сообщения:
    4
    Битмап создаем функцией CreateBitmap, dc получаем CreateCompatibleDC. Почему SelectObject dc, <созданный битмап> выдает ошибку?
     
  7. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    А почему не читаете MSDN -> CreateBitmap -> Remarks ? Вот только отрывок:

    "Whenever a color bitmap returned from CreateBitmap is selected into a device context, the system checks that the bitmap matches the format of the device context it is being selected into".