Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C/C++] Win32 API: Significato della funzione BitBlt

    Salve a tutti, ho cominciato da poco a programmare con le Win32 API, ed ho trovato un algoritmo con cui caricare una bitmap che utilizza la funzione BitBlt, solo che non ho capito a che cosa serve.
    La traduzione della spiegazione del msdn è "La funzione BitBlt esegue un trasferimento di blocchi di bit dei colori corrispondenti ai dati in un rettangolo di pixel, dal Device Contest di origine ad un Device Contest destinatario", ma non ho ancora capito che significhi!!! chi mi può dare una spiegazione più "capibile" possibile?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    In pratica, sposta pezzi di immagine così come rappresentata nel device context (non contest) ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Allora, vediamo se ho capito:


    1. Preparo la finestra ad essere disegnata, preparando una struttura di disegno (PAINSTRUCT ps) [HDC retPaint=BeginPaint(HWND hwnd, &ps)] (ritorna NULL se non è disponibile nessun DC)
    2. Creo una memory DC solo se il DC (in questo caso il monitor) è disponibile (cioè se BeginPaint() ha ritornato un nonNULL) [HDC hDC=CreateCompatibleDC(retPaint)] (ritorna l'handle della DC)
    3. Seleziono un oggetto graphics (la superficie su cui disegnare) (passando come primo parametro la handle del DC e come secondo la handle dell'oggetto) [SelectObject(hDC, HBITMAP hObj)]
    4. Prelevo le informazioni dell'oggetto grafico fornendogli la propria handle, il numero di informazioni (quelle di un bitmap[BITMAP bmp]), e il buffer(bmp) [GetObject(hObj, sizeof(BITMAP bmp), &bmp)]
    5. Tramite la funzione BitBlt, trasferisco le immagini da file al DC???

    E qual è questo DC d'origine??

    Grazie mille per la risposta

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Da file ? La BitBlt lavora da memoria a memoria ...

    Ma tu, cosa vuoi fare ?

    Lascia perdere, per ora, la generica domanda sulla BitBlt e spiega cosa vuoi fare ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Se quello che vuoi fare è disegnare un'immagine sullo schermo dovrai:
    - caricare la bitmap con la LoadImage;
    - creare un memory DC;
    - selezionare nel DC in questione l'HBITMAP ottenuto prima (salvando la bitmap "stock" che ci stava dentro prima);
    - nel WM_PAINT, ottenere il DC di output con la BeginPaint;
    - usare BitBlt per copiare l'immagine contenuta nel memory DC al DC della finestra;
    - cleanup (EndPaint, SelectObject con la bitmap stock riottenendo l'HBITMAP di prima, DeleteObject sulla bitmap, DeleteDC sul memory DC).
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Ok, grazie mille a tutti e due, avevo capito male io...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.