ImageGadget ein neues Bild geben

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ImageGadget ein neues Bild geben

Beitrag von Kiffi »

NicTheQuick hat geschrieben:Dann gehen ja auch die Beispiele in der Hilfe nicht, oder wird die Hilfe da für jedes OS nochmal extra angepasst? ;)
fairerweise muss ich dazu sagen, dass der Pfad im Code von mir ist (also so nicht original in der Hilfe steht).

Aber wenn es mit der Transparenz (in Verbindung mit dem ImageGadget()) unter Linux nicht klappt, ist der Code ohnehin wertlos. Vielleicht geht es mit dem CanvasGadget()?

Grüße ... Peter
a²+b²=mc²
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: ImageGadget ein neues Bild geben

Beitrag von Shardik »

In Linux ist es etwas komplizierter als in Windows... :lol:

Ich habe bereits früher einmal im englischen Forum gezeigt wie es geht:
http://www.purebasic.fr/english/viewtop ... 04&start=2

Kiffis Beispiel muß daher für Linux wie folgt abgewandelt werden:

Code: Alles auswählen

UsePNGImageDecoder()

OpenWindow(0, 0, 0, 245, 105, "ImageGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

SetWindowColor(0, RGB(255,0,0))

If LoadImage(0, #PB_Compiler_Home + "examples\sources\Data\world.png")
  ; ----- Wait until background color is applied

  Delay(20)
  While WindowEvent() : Wend

  ; ----- Grab background from window

  StartDrawing(WindowOutput(0))
    GrabDrawingImage(1, 10, 10, ImageWidth(0), ImageHeight(0))
  StopDrawing()

  ; ----- Draw transparent PNG image into background image

  StartDrawing(ImageOutput(1))
    DrawAlphaImage(ImageID(0), 0, 0, 255)
  StopDrawing()

  ImageGadget(0,  10, 10, 100, 83, ImageID(1))
EndIf

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Benutzeravatar
CodeCommander
Beiträge: 213
Registriert: 02.03.2014 16:06

Beitrag von CodeCommander »

~ DELETE ~
Zuletzt geändert von CodeCommander am 18.01.2015 14:37, insgesamt 1-mal geändert.
~ DELETE ~
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ImageGadget ein neues Bild geben

Beitrag von ts-soft »

Genau, Hintergrund des Bildes und des Fensters haben verschiedene Farben!
Wenn die Farbe so gelassen wird, wie sie ist, funktioniert es auch so:

Code: Alles auswählen

UsePNGImageDecoder()

OpenWindow(0, #PB_Ignore, #PB_Ignore, 100, 100, "")
ImageGadget(0, 25, 25, 48, 48, CatchImage(0, ?PureBasic_48_png_start), #PB_Image_Border)

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

DataSection
  PureBasic_48_png_start:
    ; size : 3325 bytes
    Data.q $0A1A0A0D474E5089,$524448490D000000,$3000000030000000,$F902570000000608,$5948700900000087
    Data.q $1C0000201C000073,$00009E9B0FCD0120,$D607454D49740700,$C953B60D17151C0C,$4144499C0C000004
    Data.q $5D8C7999D5DE6854,$EF7B9CE73FC75DD7,$78E2CF17D9BDE65B,$907126A2B60927A9,$546D02D2602C8A93
    Data.q $5555116D24489694,$A152044A2540A505,$A6A102108AA90682,$A0510A2ACB454034,$B66CE3524E2C84B4
    Data.q $8F167B19C664F6C7,$E1CF77DFBEDF5F67,$B1ED89363C667B8F,$27DD5EE8E91C48C7,$FEFDF6DF9EFBFBBD
    Data.q $9E2A3C4B568B62AE,$D6DFF68796A1F479,$815294B6322A5311,$BB0B61B900A00ED6,$FB22D8969AFEE4B9
    Data.q $D751B97E0F23F4C5,$18151C295CF1D8FF,$82D1904672062B29,$11D749B5D4C9A04C,$15D2A39A9954BAE9
    Data.q $7A4DA72A4445D2A9,$7E93373E1D4A5F36,$07E5256670B67273,$637AF6076D6068DA,$A6559BD1E2799C00
    Data.q $1807E306DD745030,$0251C06106308EBF,$1C5CF2839E3839E5,$2E50F8190295C5C7,$94117AE01082AD41
    Data.q $D058AE74B55282E7,$F9DC8FF555266AF9,$058C81E6069ED7C3,$6F87F8D7AE72D172,$CFA7B7FCE9A2A1DE
    Data.q $6036831B4068374F,$021A040DAAF63708,$6A69C51B9408D06D,$0AA21E7A426C69C2,$411D7A0C8D4C57C2
    Data.q $D7E1FC57575F75AD,$DC281D7817B801DE,$2E2F81FF767F0010,$00AB746CC0789D9C,$80C26E785EF74263
    Data.q $2BAA15FB418D2017,$45086C614B2BCA15,$B4DFF625F989D4C1,$62C9E9E391C2FCDD,$63C67EF6B1B59B69
    Data.q $BA3DAFD0D79AEA93,$83EFAA8DF0B33733,$31A2366B9A131831,$5BB4A40290081E1B,$541477C025061480
    Data.q $1A9D2F8FBDB03C0A,$C0538097654B1FC9,$68EF6E00E5B8B000,$6CD9B2B7D4E5D191,$DE306F59DACC1823
    Data.q $C2D6208F58BF0D98,$62924344EF0880CB,$E717F1B7BB7B856E,$BC0F37353CFF4AE7,$FE2F1407BC0CBC03
    Data.q $F03FCFDCF0002DE7,$426369CFE2C2D4B9,$C6F75DCD63180D43,$B64DD003EF34EFC5,$4E56D6F6E45A9CB0
    Data.q $02599D0DAFB5AB94,$A83F640F592F004E,$AFC0D7A6F46B6102,$B17CFF333EA7AA7E,$EE242FE375E98952
    Data.q $B02C203D611AF27A,$D3662CCD9244818B,$27C18D8D621CF0EC,$FC083D69AE5D1F0F,$B397EA7436DFF027
    Data.q $0D951E2DBC49D365,$EB5B64CF9F3FA9CB,$E4C22108148786DA,$83BD088D653D6215,$13C5E030BC9D1730
    Data.q $4F7F4FB49A552AA4,$7A855337D5FFB9AF,$D3A5B11C0438147D,$BBBDF0069B3D92BF,$98DC9B642A51DB6F
    Data.q $5568139B4428D4BB,$7A9A041001247C01,$4F422392C2234750,$084559422F52F45C,$791E4ED7647C3352
    Data.q $FC0934A15CF664EB,$4E90DCF2B6F3EED8,$E214B8F8187C00DC,$93751FD6D788CECE,$BAC5EA37BC5EA33B
    Data.q $4286D6F681C8D163,$04067AC1AD7557D5,$33277340DA30F5CA,$46A79DBEDC1CA3D3,$AF024E4D8ECF0B27
    Data.q $D2507DCFF8DBCF00,$643E06E80F00056E,$75F74D0237764DAF,$5D3F7D5DF5FCDCB4,$10890840A5A97DF1
    Data.q $2EE972B289A26882,$C1DED7D864CE1967,$CE0D8F37F94AC56B,$5D4813780E7990D8,$1CC0F991A2B7692E
    Data.q $FB1028A02C4402B0,$CF53787F9DBEAEE8,$06D180349CB9D2F7,$20922546345E3421,$FCC7B43EBB34EE7D
    Data.q $B72E7C787E54E8D5,$DA2F02EF00AEA958,$C00AD7F18CDE9F7A,$B7E002CFADBE1058,$B3F76F62FB1BDCEE
    Data.q $0C615AD2EDB3B353,$3D9F4C3DAD502908,$70C0C4F376BBDDC9,$0C043014EAD2D0EE,$566A0FA580A7005B
    Data.q $AFB17FE7C4E00A5B,$FF317CB9EEE5BDAB,$A1D1F6FD9F4EC797,$C9FE767B1BFEA055,$D68B9E794FDCECFC
    Data.q $2EF7788636831810,$7E3EBEBECBBECE46,$D34B0BCBFCF1BDF7,$96CB526D97FE44B6,$039537D252D7F8E7
    Data.q $9FE79B777C7C8F23,$C6E28B17A35AE590,$5D3169AF9C8CA663,$07AFC0A5F01D4E5C,$368950607A80FD54
    Data.q $B9E51E29A3DEC706,$8CD726C7EFF15CD5,$CDD4F65369DB37FF,$7767C0F6ABD436B5,$424BAFFF75CD39F7
    Data.q $181142F226B6CA37,$D3D726634F4D0221,$4F9AD5046046D5D8,$946C6C718C83E2B9,$FE5475B52C73B393
    Data.q $EC3B693819726C69,$6AF264BD7EBE3580,$C2EBF7D8EFA78801,$13AD53173D440FD1,$B3A7008C1CA90651
    Data.q $10E9180C0844E505,$15E9AB22B9D318C8,$BE5FD11E1DC51C5A,$41E1DC8D1BB77F7F,$3FC9DC9943926D09
    Data.q $362BF35D32767538,$1A10F2D98B44D67C,$54734B36F747D4FD,$CA149D2111B89CC4,$841CA90A54854841
    Data.q $3ECB9407EABF630A,$4D6BA946898F9AE5,$4F2174454A54F810,$5C7312E239A052BC,$FC79191B8F2448DC
    Data.q $683B393FBED7D0E8,$87D4F03D4B755B2B,$273151DFD19AF66F,$476BCEA35EE237AE,$1529020408C60DA6
    Data.q $DC5CA78D7DD432AE,$8A2F189D8DAD0368,$D8F0625A9D246869,$7571FF25364DEC6B,$E1AC7BD9C9FDFA31
    Data.q $62570BDAAF81DB45,$51549F7B3B0BE2A3,$4D5F17170282E079,$245E581D08D78FC8,$90852908A4484225
    Data.q $63F18562883A570A,$42D907E71223B06F,$8D62D007BD4FF7E9,$B703B1F13A32DADE,$0B285472AAF9A447
    Data.q $8825271A1908C485,$235E7B02E48348D0,$30E11090F9691276,$7A75FC79380F5EA2,$F0C0CAFB50C46684
    Data.q $CA03181B78067032,$72A9E9D2CB81CD9B,$E94BA353E5C99835,$4AE52BB64FD57AF6,$4A15082D71D211C7
    Data.q $B135088DA28690AB,$F308A448460D68D6,$3E5880787A70E904,$F1C8E47F58D8D04D,$C09647E0419B5F45
    Data.q $91802CB82F4B5FCD,$B87F55CD5A1D497C,$A66AC2FCF77FCE94,$9E10ECEDEC1EF35C,$4DACFA05CDF4E17B
    Data.q $4350FB0A1D03EA28,$7D4B389B1872A44A,$8713E08ECE8E8669,$FBCB69C1EA14AD8F,$566E7D96AEA6055F
    Data.q $DBD4BFB3589B68D0,$25EB3F7B5DC6FD59,$F8C9060450286EE3,$996ADC3189A52ACC,$505B5DE309A01EA0
    Data.q $8D4CC9E616662A42,$90323A1FADDBDFD2,$12F3FE5ACF54A85A,$542A99B3CAD9B130,$4BED4775BD5F5207
    Data.q $A621B1A443FFB7BB,$9302A973B3D759B5,$1E4FE9B575F4A313,$496BEE5495E9913E,$6D6DBD894DADFDAA
    Data.q $30B15A2B12689571,$EFD3E63D7D1DCC31,$D4F613CB17CE660C,$5F13A7AE57C6B15F,$CCFC4C471DC40FB1
    Data.q $A56B8F6DED2267FE,$A39A2A641088E1C2,$4FC79935B4F4C343,$A7024E2B97BD4D9D,$FBAEA941B9AA00ED
    Data.q $13DB4434B7DD631A,$64F95CA91FFA345E,$1800FC06BC033726,$980155FC63D7F204,$DFEB6B44B1FFB83E
    Data.q $EA549060168445E2,$5F31D46E08F0C6F0,$ACE7B2A40CCD9F1F,$B2E8126C75643C14,$031AEFB4E807A17A
    Data.q $9BCEA59BB3E35B0E,$8913FEDC0F33A10E,$794508AE785BF264,$7A7D7926C6066558,$6E74C9CAB6D6F986
    Data.q $5355B8F9E36A3809,$8F056CD004846ACA,$1B75FC9ECE769DB4,$C5F67BD7FE24D97F,$3B132648FE3535F7
    Data.q $E7016B1673CFAC40,$35B4F702F92A454B,$DE1F24F7B3F7BFB9,$F92E99D7D63EA7DD,$53B9B550AE78F4C1
    Data.q $05ACC00B02AE86B1,$250862B9B0DEB950,$AF59EBBC1E4C475C,$12E30BCA5A0BE9B9,$08912A2A5F1F5611
    Data.q $5AD12AEAF4915C99,$7ECDAD1D0364AE95,$87ABD28573E398C5,$43D3B1CAFC5F96E6,$1996E0D186D298DA
    Data.q $AFE4FE0F0B00597E,$FAEEB8C6FE9B9B24,$2A904A5CF9ACDB7C,$8E2A6BAD5142626C,$94E2CF98A254BE4B
    Data.q $2838892D2E7AB48B,$5B267EBF2E5ABD35,$B5BF1F89E1A9F978,$08556FA81EB55B9A,$B6DFF707E3002FFD
    Data.q $2113468886F931AD,$810B2A90980411CD,$AF0C8C2840852111,$5CF7C03D5A84F6DA,$149908B94A8D7E8A
    Data.q $48B1123CF269D44D,$1CAA573DBDAD5B39,$991A3FC5E56E7E7A,$3BD5AFA3BCD6031A,$CFD17D81E6F80117
    Data.q $C87D8689931D37B5,$42002C175F84BF90,$0433DAC81D7B6B00,$651891EA1B40EEDA,$1225E904F396A861
    Data.q $663C5B438ECD3CA5,$0757FD552F8F5AAA,$8DFC68677F97C573,$C66C13BD6B3942B1,$EEEEF2FBC07A973B
    Data.q $474F793E34B57783,$2A569886896D81CB,$2900237A0006F7F4,$875AC5A48AFC2231,$25231213C92C6816
    Data.q $0CA5CA5CF351EB81,$AEED0ACCB132ECF5,$AD5B9394A1EBB343,$77F2BEAE5F38DFD5,$DE7D3E333D2FF353
    Data.q $1569733C95FA8032,$D5F9B9FA0BA56F92,$B4A943B367C737EC,$94C5E22FAF020D1F,$C51FF6109509C272
    Data.q $2FC6C41BC37FC4DA,$1888214485EE1701,$FA22764D104DC249,$2B247459278E90F6,$163BB3D8222474D9
    Data.q $31697F6E54B47079,$B000B3797E856735,$E54291F9C0D964BC,$72677F4CADCCBFDC,$B4452AD0285D396E
    Data.q $D40CE13A462373D3,$08DD9D6C64CAF588,$E16E1B08427058CE,$5E0D05AB854A4B90,$F99157A42CA26512
    Data.q $3A7F0B1333EDF9A2,$34D5F4F9BB68BD3A,$466D9A9F333EF53B,$B9F40E5E3946768B,$985A9DDF738533B7
    Data.q $D565AA67296E6179,$CE919471C278AAE7,$A1E6BD42617DA745,$5AAC00DEED2D9FB5,$D5743A11EEF9302C
    Data.q $95B9F7FB9536393C,$E952796A3A2B3B05,$ED8E239157101E4A,$A5FA04EC1A962DAA,$E9FADF35750FFD10
    Data.q $39B57776F75DAE9E,$D1223D678E34A4B1,$1D43BB2A409CF5A8,$CCE66054B943942D,$3C7A713CC751ED00
    Data.q $2F2E4765372A56F3,$17375FABD36CC700,$06DBB876BA7E44BA,$A73D5B9B81BB01F4,$EDEA1E5BF69EB1FF
    Data.q $248F593DBDB7BEDE,$D5D930FA4F59D2D1,$D30C4C2C73152EFA,$43D34707E7F5731C,$0D89C1F56C3C1121
    Data.q $4C1615DC321BA2F3,$1FA026E04EB692C4,$7A67CB7E31ADBFE8,$92DDD3DBD83CF63B,$A529284491EAF168
    Data.q $F4EAC33E42929183,$91C9CCF82458B128,$7C857EC26562B9D4,$D8B1B466CCBC92C1,$BB01B6C431B84682
    Data.q $9ABA27FF44257E80,$B647D763BBB87D6F,$4B96CC8B7889B4F5,$9E8F06E220A61764,$36ACC6D4A8595918
    Data.q $C550CD374ACED178,$CF36B10C0F92D216,$D17DD6FDB7AC7FE9,$933E3D3C318AEF58,$33B25FE335F5FACD
    Data.q $D4B31B82A8626BD2,$ACC363D803B62125,$6D476936E3A936CB,$59006E85C25B37CD,$77ACDB05D5988074
    Data.q $E528CB5FCFC8562A,$30D8E621A5C012FF,$FF5ABFFF62923733,$195FD8DAF3401403,$4E454900000000B7
    Data.b $44,$AE,$42,$60,$82
  PureBasic_48_png_end:
EndDataSection
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: ImageGadget ein neues Bild geben

Beitrag von NicTheQuick »

CodeCommander hat geschrieben:
Shardik hat geschrieben:In Linux ist es etwas komplizierter als in Windows... :lol:
Ist doch immer so, wen wundert's ;)
Du stellst das immer so dar, als ob das der Fehler bei Linux läge. Dir ist aber offensichtlich nicht klar, dass der Fehler bei Purebasic liegt.
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: ImageGadget ein neues Bild geben

Beitrag von stevie1401 »

Shardik's Beispiel aus dem englischen Forum ist 3 Jahre alt. Und den Fehler gibts noch immer?
Warum wird er nicht behoben?
Muss ich diese Procedure tatsächlich bei allen transparenten Icons machen, die ich laden möchte - und bleiben diese dann auch transparent, wenn sie mal "unsichtbar" gemacht werden?
Und funktioniert dieser Code auf allen Plattformen?

Ich bewege diese transparenten ImageGadges auch noch und sie haben ein Bild als Hintergrund. Evtl einen Holz-Hintergrund, irgendwas, was nach Tisch aussieht.
Bleiben die ImageGadges auch transparent, wenn ich die auf einem solchen Hintergrund bewege?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: ImageGadget ein neues Bild geben

Beitrag von NicTheQuick »

Also wenn du diese ImageGadgets auch noch bewegen willst, dann würde ich das ganze schon mal ganz anders angehen. Nutze doch einfach ein großes 'CanvasGadget()', und zeichne immer dann, wenn sich was ändern soll, alles neu. Also zuerst das Hintergrundbild und dann die Karten drüber. Und das alles innerhalb eines 'StartDrawing(CanvasOutput(#id)) : StopDrawing()'-Blocks. Dann hast du nirgendwo Probleme mit irgendwelchen transparenten Gadgets und außerdem kannst du auf jede Mausbewegung und jeden Klick ganz einfach reagieren.

Vielleicht hilft dir auch das hier etwas weiter: [PB] HowTo: CanvasWindow (Teil 1/2)
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: ImageGadget ein neues Bild geben

Beitrag von stevie1401 »

Alles klar, vielen Dank.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: ImageGadget ein neues Bild geben

Beitrag von stevie1401 »

Code: Alles auswählen


OpenWindow(0, 0, 0, 245, 105, "ImageGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

SetWindowColor(0, RGB(255,0,0))

If LoadImage(0, irgendeinBildMitTransparentemHintergrund.png)
   ImageGadget(0,  10, 10, 100, 83, ImageID(0))
EndIf

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

Transparenz funktioniert seit Version 5.41 mit Linux <)
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: ImageGadget ein neues Bild geben

Beitrag von Shardik »

stevie1401 hat geschrieben:Transparenz funktioniert seit Version 5.41 mit Linux <)
Das kann ich bestätigen. Ab PB 5.40 ist dies so, in PB 5.31 funktionierte dies noch nicht (getestet auf Ubuntu 12.04 x86 mit Unity und Ubuntu Mate 14.04 x86 mit Mate und jeweils mit GTK2 und GTK3).

Allerdings wird Dein obiges Beispiel so nicht funktionieren (auch wenn Du einen korrekten Pfad zu einem PNG-Bild einträgst), weil Du die Anweisung UsePNGImageDecoder() vergessen hast... :wink:

Daher noch einmal das modifizierte Beispiel von Dir, das ab PB 5.40 direkt nach Kopieren und Einfügen ein Bild mit transparentem Hintergrund korrekt anzeigt:

Code: Alles auswählen

UsePNGImageDecoder()

OpenWindow(0, 0, 0, 245, 105, "ImageGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

SetWindowColor(0, RGB(255, 0, 0))

If LoadImage(0, #PB_Compiler_Home + "examples/sources/Data/world.png")
   ImageGadget(0, 10, 10, 100, 83, ImageID(0))
EndIf

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Antworten