Aussage im Internet :
GetDIBits füllt die Farbtabelle nicht ordnungsgemäß aus, wenn DIB-Abschnitte mit 1 Bit/Pixel oder 4 Bit/Pixel in das DIB-Format mit 8 Bit/Pixel konvertiert werden. Mit falschen Werten wird die Farbentabelle initialisiert statt die Farbentabelle des Bilds mit 8 Bit initialisieren, das die Farben aus der Farbentabelle des Quellbilds verwendet.
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel Microsoft-Produkten handelt.
Kannst du diesen Befehl durch einen anderen ersetzen :
GetDIBits_(hdc, ImageID(img), 0, bmi\bmiHeader\biHeight, @ImageData(0), bmi, #DIB_RGB_COLORS)
MFG
Code: Alles auswählen
Procedure GLLoadAlphaTexture(Filename.s, TexFilter, TransparentColor)
img = LoadImage(#PB_Any, Filename.s)
Width.l = FindNextExp(ImageWidth(img))
Height.l = FindNextExp(ImageHeight(img))
ResizeImage(img, Width, Height)
Size.l = Width * Height * 4
Dim ImageData.b(Size)
hdc = StartDrawing(ImageOutput(img))
bmi.BITMAPINFO
bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
bmi\bmiHeader\biWidth = Width
bmi\bmiHeader\biHeight = Height
bmi\bmiHeader\biPlanes = 1
bmi\bmiHeader\biBitCount = 32
bmi\bmiHeader\biCompression = #BI_RGB
bmi\bmiHeader\biSizeImage = (bmi\bmiHeader\biWidth * bmi\bmiHeader\biHeight * bmi\bmiHeader\biBitCount / 8)-1
GetDIBits_(hdc, ImageID(img), 0, bmi\bmiHeader\biHeight, @ImageData(0), bmi, #DIB_RGB_COLORS)
red = Red (TransparentColor)
green = Green(TransparentColor)
blue = Blue (TransparentColor)
For k=0 To Size-1 Step 4
b = ImageData(k ) & $FF
g = ImageData(k+1) & $FF
r = ImageData(k+2) & $FF
If r = red And g = green And b = blue
ImageData(k+3) = 0
Else
ImageData(k+3) = $ff
EndIf
ImageData(k+2) = b
ImageData(k ) = r
Next
StopDrawing()
glGenTextures_(1, @Tex) ;Textur speichern
If TexFilter = 0 ;versch. Textur-Filter
glBindTexture_(#GL_TEXTURE_2D, Tex)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_NEAREST)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_NEAREST)
glTexImage2D_(#GL_TEXTURE_2D, 0, #GL_RGBA, Width, Height, 0, #GL_RGBA, #GL_UNSIGNED_BYTE, @ImageData(0))
ElseIf TexFilter = 1
glBindTexture_(#GL_TEXTURE_2D, Tex)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_LINEAR)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_LINEAR)
glTexImage2D_(#GL_TEXTURE_2D, 0, #GL_RGBA, Width, Height, 0, #GL_RGBA, #GL_UNSIGNED_BYTE, @ImageData(0))
ElseIf TexFilter = 2
glBindTexture_(#GL_TEXTURE_2D, Tex)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_LINEAR)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_LINEAR_MIPMAP_NEAREST)
gluBuild2DMipmaps_(#GL_TEXTURE_2D, 4, Width, Height, #GL_RGBA, #GL_UNSIGNED_BYTE, @ImageData(0))
EndIf
FreeImage(img)
ProcedureReturn Tex
EndProcedure