Deutsch
Quelltexte/ 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 eine Bereichsvariable gepackt
KompilierenMarkierenSeparieren
whileloop 128*4*10

    byte bildxy#,&loop=255

endwhile


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%=%bmpy

KompilierenMarkierenSeparieren
height%=%bmpy
width%=%bmpx
gemacht.
 
24.02.2009  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.378 Betrachtungen

Unbenanntvor 0 min.
H.Brill15.09.2021
AndreasS27.12.2018
Heli9824.06.2017
funkheld12.01.2014
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

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


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


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