| |
|
|
| Mit GetDiBits und SetDiBits kann man BMP-Bilder im Speicher schnell manipulieren. Grobe Beschreibung : KompilierenMarkierenSeparieren > wird in den Speicher gelesen KompilierenMarkierenSeparieren > Bild wird in eine Bereichsvariable gepackt KompilierenMarkierenSeparieren 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 > Die Bereichsvaribale wird wieder auf dem Handle : bild_h& gesetzt KompilierenMarkierenSeparieren > 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
|
|
|
| |
|
|
|
| Klasse Beitrag und schön erklärt! |
|
|
| |
|
|
|
Frank Abbing | So hat iF die DIBs jetzt endlich auch verstanden... |
|
|
| |
|
|
|
| Ich wusste der Tag würde kommen... |
|
|
| |
|
|
|
| |
|
| |
|
|