Hallo,
die meisten wissen ja das, dass ImageGadget() nur *.ico Dateien unterstützt wenn es um die Transparenz geht.
Meine Frage ist, gibt es eine Möglichkeit und zum Beispiel *.png oder wahlweise auch *.gif Dateien zu verwenden das deren Transparenz auch angenommen wird und nicht einfach weiß dargestellt wird?
Mir würde ggf. auch eine *.dll Datei helfen wenn diese ein Image mit Transparenz in ein Icon konvertieren kann mit vernünftigen Ergebnis...
Ich hoffe das es da was gibt.....
Liebe Grüße
ImageGadget() Bilder mit Transparenz
- Tsuki-Namida
- Beiträge: 633
- Registriert: 17.11.2005 13:27
- Kontaktdaten:
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Könnte sein, das Dir dieses weiter hilft. Hab's selbst aber nicht getestet.
http://www.purebasic.fr/english/viewtop ... magegadget
http://purebasic.fr/english/viewtopic.p ... 582#243582
Gruß, Falko
http://www.purebasic.fr/english/viewtop ... magegadget
http://purebasic.fr/english/viewtopic.p ... 582#243582
Gruß, Falko
- Tsuki-Namida
- Beiträge: 633
- Registriert: 17.11.2005 13:27
- Kontaktdaten:
- Tsuki-Namida
- Beiträge: 633
- Registriert: 17.11.2005 13:27
- Kontaktdaten:
@Falko
dein Vorschlag ist zuwar nicht schlecht aber es funktioniert leider nicht so wie ich mir das vorstelle...
es wird zwar die transparentz von dem *.png Image unterstützt aber es wird nur in 8 bit dargestellt und nicht in 32/24bit.... zudem sind die farben verfäscht -.-
und ich bekomme es nicht auf ein frnster drauf damit ich damit arbeiten kann wie zum beispiel "Imagegadget()"
@all
bitte verzeit meine rechtschreibschweche.... aber ist es nötig das hier so auszubreiten? T-T zudem hilft es mir nicht bei mein oben geposteten problem...
dein Vorschlag ist zuwar nicht schlecht aber es funktioniert leider nicht so wie ich mir das vorstelle...
es wird zwar die transparentz von dem *.png Image unterstützt aber es wird nur in 8 bit dargestellt und nicht in 32/24bit.... zudem sind die farben verfäscht -.-
und ich bekomme es nicht auf ein frnster drauf damit ich damit arbeiten kann wie zum beispiel "Imagegadget()"
@all
bitte verzeit meine rechtschreibschweche.... aber ist es nötig das hier so auszubreiten? T-T zudem hilft es mir nicht bei mein oben geposteten problem...

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
@Offtopic
entschuldige, tut mir leid. war halt irgendwie so komisch, die formulierung. nimms nicht persönlich.
@Topic
in dem ersten verlinkten thread sind ein paar nicht-funktionierende codes drin.
erst der hier macht es anscheinend richtig:
http://www.purebasic.fr/english/viewtop ... 814#211814
in dem zweiten thread schreibt SofT MANiAC, dass man keine Farbe (0,0,0) in dem PNG haben soll für sein beispiel.
+Offtopic
das Bild in deiner Signatur wird nicht angezeigt.
> The requested URL /PB-Signatur.png was not found on this server.
entschuldige, tut mir leid. war halt irgendwie so komisch, die formulierung. nimms nicht persönlich.
@Topic
in dem ersten verlinkten thread sind ein paar nicht-funktionierende codes drin.
erst der hier macht es anscheinend richtig:
http://www.purebasic.fr/english/viewtop ... 814#211814
in dem zweiten thread schreibt SofT MANiAC, dass man keine Farbe (0,0,0) in dem PNG haben soll für sein beispiel.
+Offtopic
das Bild in deiner Signatur wird nicht angezeigt.
> The requested URL /PB-Signatur.png was not found on this server.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Soweit ich das nun testen konnte als auch das passende 32-Bit-PNG aus der
Seite mit Schwarzen Hintergrund transparent gemacht habe funktioniert es
ohne Farbverfälschungen. Zudem ist dieser Source kürzer und ohne GDI.
Beide machen das gleiche. Nur wird das mit Hilfe #WS_EX_LAYERED des Windows erzeugt.

Diesen 32-Bit-Pinguin kann man mit der Maus überall verschieben und er bleibt transparent.
Gruß Falko
Seite mit Schwarzen Hintergrund transparent gemacht habe funktioniert es
ohne Farbverfälschungen. Zudem ist dieser Source kürzer und ohne GDI.
Beide machen das gleiche. Nur wird das mit Hilfe #WS_EX_LAYERED des Windows erzeugt.

Code: Alles auswählen
UsePNGImageDecoder()
img = LoadImage(#PB_Any, "scaled.png")
OpenWindow(0,0,0,300,300,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_BorderLess)
SetWindowLong_(WindowID(0),#GWL_EXSTYLE,GetWindowLong_(WindowID(0),#GWL_EXSTYLE)|#WS_EX_LAYERED)
hDC = StartDrawing(ImageOutput(img))
sz.SIZE
sz\cx = ImageWidth(img)
sz\cy = ImageHeight(img)
ContextOffset.POINT
BlendMode.BLENDFUNCTION
BlendMode\SourceConstantAlpha = 255
BlendMode\AlphaFormat = 1
UpdateLayeredWindow_(WindowID(0), 0, 0, @sz, hDC, @ContextOffset, 0, @BlendMode, 2)
StopDrawing()
ImageGadget(0,0,0,0,0,ImageID(img))
HideWindow(0,0)
Repeat:E=WaitWindowEvent():Delay(5):Until(E=#PB_Event_CloseWindow):End
Gruß Falko
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Aber um das PNG auf ein Windows zu bekommen, kann man es am besten
mit diesen passenden Source machen. Ich habe ihn noch etwas
modifiziert, da dieser noch sehr alt war
Originalsource hier: http://www.purebasic.fr/english/viewtop ... 669#113669
Die PNG als Beispiel, siehe vorherigen Eintrag. Bitte diesen Pinguin als
scaled.png kopieren, falls der Name hier nicht durchkommt.
Ich nenne diesen neuen Source mal: Transparent_PNG.pb
Gruß, Falko
mit diesen passenden Source machen. Ich habe ihn noch etwas
modifiziert, da dieser noch sehr alt war

Originalsource hier: http://www.purebasic.fr/english/viewtop ... 669#113669
Die PNG als Beispiel, siehe vorherigen Eintrag. Bitte diesen Pinguin als
scaled.png kopieren, falls der Name hier nicht durchkommt.
Ich nenne diesen neuen Source mal: Transparent_PNG.pb
Code: Alles auswählen
;OriginalSource von http://www.purebasic.fr/english/viewtopic.php?p=113669#113669
Procedure DrawTransparentImage(DC, Bitmap, x, y, Width, Height, TransparentColor)
maskDC = CreateCompatibleDC_(DC)
tempDC = CreateCompatibleDC_(DC)
SourceDC = CreateCompatibleDC_(DC)
SelectObject_(SourceDC, Bitmap)
hMaskBmp = CreateBitmap_(Width, Height, 1, 1, 0)
hTempBmp = CreateCompatibleBitmap_(DC, Width, Height)
hMaskBmp = SelectObject_(maskDC, hMaskBmp)
hTempBmp = SelectObject_(tempDC, hTempBmp)
TransparentColor= SetBkColor_(SourceDC, TransparentColor)
BitBlt_ (maskDC, 0, 0, Width, Height, SourceDC, 0, 0, #SRCCOPY)
SetBkColor_(SourceDC, TransparentColor)
BitBlt_ (tempDC, 0, 0, Width, Height, maskDC, 0, 0, #SRCCOPY)
BitBlt_ (DC, x, y, Width, Height, tempDC, 0, 0, #MERGEPAINT)
BitBlt_ (maskDC, 0, 0, Width, Height, maskDC, 0, 0, #NOTSRCCOPY)
BitBlt_ (tempDC, 0, 0, Width, Height, SourceDC, 0, 0, #SRCCOPY)
BitBlt_ (tempDC, 0, 0, Width, Height, maskDC, 0, 0, #MERGEPAINT)
BitBlt_ (DC, x, y, Width, Height, tempDC, 0, 0, #SRCAND)
DeleteObject_ (hMaskBmp)
DeleteObject_ (hTempBmp)
DeleteDC_ (maskDC)
DeleteDC_ (tempDC)
DeleteDC_ (SourceDC)
EndProcedure
UsePNGImageDecoder()
h=OpenWindow(0,0,0,500,500,"EM Lite",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
SetWindowColor(0,RGB(255,255,255))
;CreateGadgetList(h)
ii=ImageGadget(0,50,50,84,100,0)
i=LoadImage(0,"scaled.png")
;get the color
StartDrawing(ImageOutput(0)):c=Point(1,1):StopDrawing()
Structure _rect ;API stucture for rectangles !
left.l
top.l
right.l
bottom.l
EndStructure
;Create a new rect and set the values
rect._rect
rect\left=0
rect\top=0
rect\right=84
rect\bottom=100
;create a new brush for the rectangle
;br=CreateSolidBrush_(RGB(255,255,255)); Hier für den Hintergrund die passende Farbe wählen.
br=CreateSolidBrush_(GetWindowColor(0))
;I am using api for the DC StartDrawing isnt working :(
DC=GetDC_(ii)
;create a new DC for handle the transparent image
tDC=CreateCompatibleDC_(DC)
btm=CreateCompatibleBitmap_(DC, ImageWidth(0),ImageHeight(0))
SelectObject_(tDC,btm)
;draw a background color on the new DC
FillRect_(tDC,rect,br)
;Draw the sprite on new DC
DrawTransparentImage(tDC,ImageID(0),0,0,ImageWidth(0),ImageHeight(0),c)
;Clip the image from new DC to old DC , 40 is the start cliping left i used
BitBlt_ (DC,0,0,84,100,tDC,0,0,#SRCCOPY)
;delete the new DC and Bitmap and release the DC
DeleteObject_ (btm)
DeleteDC_ (tDC)
ReleaseDC_(ii,DC)
Repeat:Until WaitWindowEvent()=16