Italia
Fonte/ Codesnippets

Bilder Getdibits Manipulation Schnelle Setdibits

 
Mit GetDiBits und SetDiBits kann man BMP-Bilder im Speicher schnell manipulieren.
Grobe Beschreibung :
KompilierenMarkierenSeparieren
bild_h& = Create(hPic, -1, test.bmp)
>
> wird in den Speicher gelesen
KompilierenMarkierenSeparieren
~GetDIBits(%hdc,bild_h&,0,bmi#.biHeight&,bildxy#,bmi#,0)
>
> Bild wird in un Bereichsvariable gepackt
KompilierenMarkierenSeparieren
whileloop 128*4*10

    byte bildxy#,&loop=255

endwhil

Bild wird manipuliert mit 128 weißen Pixeln (1 Punkt besteht aus 4 Bytes > RGBA). Der 1.Punkt ist unten links ,1. Reihe. Die Reihen fangen immer links an. Am besten ist, wenn man das BMP-Bild 128x128 Pixel macht, dann kann man gut sehen, wie die unteren 10 Reihen aus weißen Pixeln bestehen.
KompilierenMarkierenSeparieren
~setDIBits(%hdc,bild_h&,0,bmi#.biHeight&,bildxy#,bmi#,0)
> Die Bereichsvaribale wird wieder auf dem Handle : bild_h& gesetzt
KompilierenMarkierenSeparieren
drawpic bild_h&,10,10,0
> Man kann jetzt das veränderte Bild im Fenster sehen.

Mit XPIA/ASM hat man wieder viele möglichkeiten zur Manipulierung
Oder wer den DEV C++ hat und ASM nicht mag, eine schnelle DLL-Lösung herstellen um den Bereich zu verändern.

Die Demo :
KompilierenMarkierenSeparieren
 $H Windows.ph
declare bild1$
declare hWin&
Window 20,20-600,450
Cls @RGB(220,220,220)
bild1$=auto.bmp
erzeugebild(bild1$)
var ende%=1

WHILE ende%

    sleep 1
    waitkey

ENDWHILE

proc erzeugebild

    parameters namebild$
    declare width%,height%
    declare bild_h&,a&
    declare bmi#,bildxy#
    mcls 0,0,0
    startpaint -1
    mloadbmp namebild$,0,0
    endpaint
    height%=%bmpy
    width%=%bmpx
    def &BI_RGB 0
    def &DIB_RGB_COLORS 0
    struct BITMAPINFOHEADER =
    biSize&, biWidth&, biHeight&, biPlanes%, biBitCount%, biCompression&,
    biSizeImage&, biXPelsPerMeter&, biYPelsPerMeter&, biClrUsed&, biClrImportant&
    dim bmi#,BITMAPINFOHEADER
    clear bmi#

    with bmi#

        .biSize&        = sizeof(bmi#)
        .biWidth&       = width%
        .biHeight&      = height%
        .biPlanes%      = 1
        .biBitCount%    = 32
        .biCompression& = &BI_RGB
        .biSizeImage&   = ((.biWidth& * .biBitCount%  8 - 1) | 3 + 1) * abs(.biHeight&)

    endwith

    bild_h& = Create(hPic, -1, namebild$)
    drawpic bild_h&,10,10,0
    a&=bmi#.biSizeImage&
    dim bildxy#,a&
    ~GetDIBits(%hdc,bild_h&,0,bmi#.biHeight&,bildxy#,bmi#,0)

    whileloop 128*4*10

        byte bildxy#,&loop=255

    endwhile

    ~setDIBits(%hdc,bild_h&,0,bmi#.biHeight&,bildxy#,bmi#,0)
    drawpic bild_h&,10,150,0
    dispose bmi#
    dispose bildxy#

endproc

 
19.08.2008  
 



Klasse Beitrag und schön erklärt!
 
19.08.2008  
 




Frank
Abbing
So hat iF die DIBs jetzt endlich auch verstanden...
 
20.08.2008  
 



Ich wusste der Tag würde kommen...
 
20.08.2008  
 



Im obigen Code war ein Fehler versteckt, ich habe aus
KompilierenMarkierenSeparieren
height%=%bmpx
width%=%bmpye>

KompilierenMarkierenSeparieren
height%=%bmpy
width%=%bmpxe>
gemacht.
 
24.02.2009  
 



Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

5.394 Views

Untitledvor 0 min.
H.Brill15.09.2021
AndreasS27.12.2018
Heli9824.06.2017
funkheld12.01.2014
Di più...

Themeninformationen

Dieses Thema hat 3 subscriber:

iF (3x)
Frank Abbing (1x)
unbekannt (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie