Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Assembleur] Winapi Appel CreateDIBSection

    2 mai 2024 à 10:58:45

    Bonjour,
    Je programme en assembleur (NASM) pour une machine windows x64.
    Je veux remplir une fenêtre 1250x800 de points de couleurs variées
    Je crée la fenêtre par RegisterClassExA + CreateWindowExA
    Et je trace mes points dans WM_PAINT de la procédure de fenêtre avec BeginPaint + SetPixel
    Sauf que c'est beaucoup trop lent (plus de 2 secondes) à cause de SetPixel
    J'ai donc décidé de travailler en mémoire avec une section DIB, que j'afficherai après avec BitBlt
    Sauf que je n'arrive pas à faire fonctionner CreateDIBSection (retour toujour égal à 0)

    Est-ce que quelqu'un a déjà utilisé CreateDIBSection en assembleur ?
    Et pourrait me dire ce qui ne va pas ?

                        ; structure bitMapInfo
                            ; bmiHeader (40) :
                            mov [bitMapInfos + 0 ], dword 40            ; biSize            DWORD / 4    40+12
                            mov [bitMapInfos + 4 ], dword 1250                ; biWidth           LONG / 4
                            mov [bitMapInfos + 8 ], dword -800                 ; biHeight          LONG / 4
                            mov [bitMapInfos + 12 ], word 1                   ; biPlanes          WORD / 2
                            mov [bitMapInfos + 14 ], word 24                  ; biBitCount        WORD / 2
                            mov [bitMapInfos + 16 ], dword BI_RGB             ; biCompression     DWORD / 4
                            mov [bitMapInfos + 20 ], dword 0                  ; biSizeImage       DWORD / 4   ou 1250x800x3 ou 4
                            mov [bitMapInfos + 24 ], dword 0                  ; biXPelsPerMeter   LONG / 4
                            mov [bitMapInfos + 28 ], dword 0                  ; biYPelsPerMeter   LONG / 4
                            mov [bitMapInfos + 32 ], dword 0                  ; biClrUsed         DWORD / 4
                            mov [bitMapInfos + 36 ], dword 0                  ; biClrImportant    DWORD / 4
                            ; RGBQUAD          bmiColors[1];
                            mov [bitMapInfos + 40 ], dword 0xFFFFFF00
             
                       ; création de la section DIB
                            mov rcx, qword [DrawingCtxHandle]           ; [in]  HDC              hdc
                            lea rdx, [bitMapInfos]                  ; [in]  const BITMAPINFO *pbmi
                            mov r8d, DIB_RGB_COLORS                      ; [in]  UINT             usage
                            lea r9, [pBitData]                      ; [out] VOID             **ppvBits
                            push 0                                      ; [in]  DWORD            offset
                            push 0                                      ; [in]  HANDLE           hSection
                            sub rsp, 32
                            call CreateDIBSection
                            add rsp, 32
                            add rsp, 16
    • Partager sur Facebook
    • Partager sur Twitter

    [Assembleur] Winapi Appel CreateDIBSection

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    • Editeur
    • Markdown