 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 17.03.2016, 15:40 Titel: hBitMap Hintergrundfarbe |
|
|
Hi. Kann mir jemand helfen und sagen wie ich die Farbe in der HBitmap ändern kann. Egal was ich mache der Hintergrund ist entweder schwarz oder weiß.
Code: | #include Once "windows.bi"
#include Once "win\shellapi.bi"
#include Once "fbgfx.bi"
screenres 300 , 300 , 32
dim as any ptr mIcon = imageCreate( 32 , 32 )
'' Fenster handle
dim as HWND mHwnd
ScreenControl( FB.GET_WINDOW_HANDLE, cast(integer,mHwnd) )
'' Icon Laden
dim as Word nicon = 0
dim as HINSTANCE hInstance=GetModuleHandle(NULL)
dim as HICON icon = ExtractAssociatedIcon( hInstance , StrPtr( "E:\FreeBasic\Program\fbide.exe" ) , @nicon )
'dim as ICONINFO iInfo
'GetIconInfo(icon,@iInfo)
'print_console( "x/y " + str(iInfo.xHotSpot) + "/" + str(iInfo.yHotSpot) )
'' BitMap erstellen
dim as HDC mHdc = GetDC(mHwnd)
dim as HDC hdcComp = CreateCompatibleDC(mHdc)
dim as HBITMAP bitmap = CreateCompatibleBitmap( mHdc , 32 , 32 )
SelectObject( hdcComp , bitmap )
dim as BITMAPINFO bmi
With bmi.bmiHeader
.biSize = SizeOf(BITMAPINFOHEADER)
.biWidth = 32
.biHeight = -32
.biPlanes = 1
.biCompression = BI_RGB
.biBitCount = 32
End With
rectangle( hdcComp , 0, 0, 32, 32 ) ''scheint weiss zu zeichnen
dim As hbrush mBrush = createSolidBrush(BGRA( 255, 0, 0, 255 )) ''Blauer Pinsel
SelectObject( hdcComp , mBrush )
ExtFloodFill( hdcComp , 5 , 5 , BGR(255,255,255) , FLOODFILLSURFACE ) ''alles weisse soll blau werden
'' Icon in die Bmp zeichnen
DrawIconEx( hdcComp, 0, 0, icon, 32, 32, 0, NULL, DI_NORMAL )
'' fbImage erstellen/befüllen
GetDIBits( hdcComp, bitmap, 0, 32, mIcon + 32, @bmi, DIB_RGB_COLORS)
ReleaseDC( mHwnd , mHdc )
DeleteObject(mBrush)
DestroyIcon(icon)
DeleteDC(hdcComp)
DeleteObject(bitmap)
put( 50 , 50 ), mIcon, PSET
imageDestroy mIcon
getKey
|
_________________ FBIde: 0.4.6
fbc: FreeBASIC Compiler - Version 1.05.0 (01-31-2016), built for win64 (64bit)
OS: Windows NT 6.2 (build 9200) |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1276 Wohnort: Ruhrpott
|
Verfasst am: 18.03.2016, 02:07 Titel: |
|
|
Hallo braesident
Du hast die Farbe für den Pinsel falsch gesetzt. So ist es richtig:
Code: | dim As hbrush mBrush = createSolidBrush(BGRA( 0, 0, 255, 0 )) ''Blauer Pinsel |
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 19.03.2016, 20:39 Titel: |
|
|
hm, seltsames verhalten. Zumindest für mich.
Das Windows BGR anstelle von RGB nutzt hatte ich ja schon heraus gefunden. Aber das die werte nun in der RGB folge in das BGR-Macro geschrieben werden , darauf muss man erstmal kommen.
Aber so funktioniert es. Danke grindstone (für die Überstunden ) _________________ FBIde: 0.4.6
fbc: FreeBASIC Compiler - Version 1.05.0 (01-31-2016), built for win64 (64bit)
OS: Windows NT 6.2 (build 9200) |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1276 Wohnort: Ruhrpott
|
Verfasst am: 20.03.2016, 02:44 Titel: |
|
|
Keine Ursache
Die Farbdefinition funktioniert übrigens auch mit RGB bzw. RGBA von FB, allerdings auch mit vertauschten Farben (diesmal andersherum). Ich tippe mal auf einen Bug in einer der *.bi - Dateien.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 20.03.2016, 15:28 Titel: |
|
|
Es ist kein Bug, aber wenn das Farbformat in FB und Windows eben grade andersrum ist, kann man nicht erwarten dass die FB-Makros mit Windows-Puffern funktionierten und umgekehrt.  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1276 Wohnort: Ruhrpott
|
Verfasst am: 20.03.2016, 23:26 Titel: |
|
|
Gut, für RGBA (von FB) mag das so zutreffen, aber BGRA (für Windows) dürfte doch (ich habe es nicht überprüft) in einer der Win - Headerdateien definiert werden und sollte dann auch genau so funktionieren. Offenbar wird da etwas konvertiert, was nicht konvertiert gehört. Oder -je nach Sichtweise- der Farbwert wird von RGBA(FB) nach RGBA(Win) konvertiert und der Unterscheidung wegen BGRA genannt.
Das ist zwar nur ein Schönheitsfehler, aber trotzdem etwas verwirrend...
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 21.03.2016, 13:40 Titel: |
|
|
Nein, hier liegt ein Misstverständnis vor. Du würdest in C z.B. auch das RGBA-Makro verwenden, aber das, das in den Windows-Headern definiert ist - Das BGRA-Makro würdest du in C verwenden, wenn du aus Windows-Sicht in einen Puffer schreibst, der "verkehrherum" aufgebaut ist. Da allerdings FreeBASIC bereits sein eigenes RGBA-Schlüsselwort hat, wird das eigentlich "richtige" Windows-Makro nicht verwendet. FB-RGBA und Windows-BGRA tun dasselbe. Das liegt daran, dass Windows-RGBA aus Sicht von FB eben BGRA ist und andersrum. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1276 Wohnort: Ruhrpott
|
Verfasst am: 22.03.2016, 06:25 Titel: |
|
|
Oder so! Auf jeden Fall ist es verwirrend.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|