GUI: Bild anzeigen

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

M@tzM@N

Betreff: GUI: Bild anzeigen

BeitragFr, Nov 25, 2005 1:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich möchte in meinem Fenster ein Bild anzeigen.
Muss ich dafür extra ein Canvas erstellen oder geht das ganze auch einfacher?
mfg
M@tzM@N

Du bist Deutschland

Henry

BeitragFr, Nov 25, 2005 7:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, dafür sind die Canvas da.
Aiya Eärendil Elenion Ancalima!

All you have to decide is what to do with the time that is given to you.

Robsite.de ist eine Anlaufstelle für Tutorials und Tools, die Noobs das Leben leichter machen!
Forensuche ist nicht nur als Lückenfüller in den oberen Links gedacht!

Suco-X

Betreff: .......

BeitragFr, Nov 25, 2005 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder ein Panel mit (SetPanelPixmap)
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

bruZard

BeitragFr, Nov 25, 2005 15:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Dazu hätte ich dann mal 'ne Fräge.

Wie könnte man eine scrollbare Liste bewerkstelligen in der Bilder angezeigt werden die einzeln als Item fungieren sollen? Etwa so:
user posted image
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

Artemis

BeitragFr, Nov 25, 2005 15:11
Antworten mit Zitat
Benutzer-Profile anzeigen
@bruZard

Du erstellt ein Bild, in dem deine Bilder, alle in der Reihenfolge nebeneinander sind. (Wichtig: Die Bilder müssen gleich hoch und breit sein.)

Dann lädst du das Bild als Iconstrip.
Dann erstellt du eine Listbox und weist den Iconstrip der Listbox zu.
Jetzt fügst du ListboxItems hinzu, ohne einen text also "" und mit der entsprechenden BildNummer.

Habs jetzt nicht getestet, müsste aber funktionieren.

bruZard

BeitragFr, Nov 25, 2005 15:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Knackpunkt dabei ist der IconStrip ... mir liegen die Tilesets nicht in einer Reihe vor, ich müsste also erstmal eine Pixmap erstellen und jedes einzelne Tile aus dem Originalimage kopieren. Da ich bisher noch kein "CopyRect" oder ähnliches gefunden habe, scheint mir hier der Aufwand imens.
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image
 

Dreamora

BeitragFr, Nov 25, 2005 15:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum?
Zeichnest es in den Hindergrund und grabst es heraus in ein neues Pixmap
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

bruZard

BeitragFr, Nov 25, 2005 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, die Lösung war dann doch ganz einfach ... trotzdem danke Dreamora Wink

Code: [AUSKLAPPEN]

Graphics 800,600,0

Function CreateIconStrip:TImage(image_file:String,tile_count:Int, tile_vars:Int, tile_width:Int, tile_height:Int)
   Local image:TImage = LoadAnimImage(image_file,tile_width,tile_height,0,tile_count)

   Local real_count:Int = tile_count/tile_vars
   Local real_width = real_count*tile_width
   
   Local dest_pix:TPixmap = CreatePixmap(real_width,tile_height,PF_BGRA8888)
      
   Local x:Int = 0
   Local y:Int = 0
   
   For Local i:Int = 0 To real_count-1
      Local temp_pix:TPixmap = LockImage(image,i*tile_vars)
      dest_pix.Paste(temp_pix,x,y)
      UnlockImage(image)
      x:+tile_width
   Next
   
   Return LoadImage(dest_pix)
End Function

Global mystrip:TImage = CreateIconStrip("data/tilesets/sandsturm/ground/tset01.bmp",56,4,32,32)

Repeat
   Cls
   
   DrawImage mystrip,0,0
   Flip
Until KeyHit(KEY_ESCAPE)


Die Funktion CreateIconStrip erzeugt aus einem Tileset einen Iconstrip. Der Parameter tile_vars ist bei mir von Bedeutung weil jedes Tile in einem Set in n verschiedenen Variationen vorliegen darf. Im Editor will ich aber natürlich immer nur eine Variante des Tiles anzeigen.
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

bruZard

BeitragFr, Nov 25, 2005 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Es darf also kein TImage sein, sonders muss ein TPixmap sein ... schön dass auch das nicht dokumentiert ist ... naja, hier mal ein funktionierender Code und ein Test-Download für eine Listbox als Tile-Auswahl:
Code: [AUSKLAPPEN]

Strict

Global mywin:TGadget   = CreateWindow("Iconstrip Test",0,0,640,480,0,WINDOW_TITLEBAR|WINDOW_STATUS|WINDOW_MENU)
Global list:TGadget      = CreateListBox(2,2,60,ClientHeight(mywin)-4,mywin)

Local mystrip:TIconStrip = LoadIconStrip(CreateIconStrip("tset01.bmp",56,4,32,32))
SetGadgetIconStrip(list,mystrip)

For Local i:Int = 0 To 13
   AddGadgetItem(list,"",GADGETITEM_DEFAULT,i)
Next


Repeat
   WaitEvent()
   
   Select EventID()
      Case EVENT_WINDOWCLOSE;      End
      
   End Select
Forever


Function CreateIconStrip:TPixmap(image_file:String,tile_count:Int, tile_vars:Int, tile_width:Int, tile_height:Int)
   Local image:TImage = LoadAnimImage(image_file,tile_width,tile_height,0,tile_count)

   Local real_count:Int = tile_count/tile_vars
   Local real_width = real_count*tile_width
   
   Local dest_pix:TPixmap = CreatePixmap(real_width,tile_height,PF_BGRA8888)
      
   Local x:Int = 0
   Local y:Int = 0
   
   For Local i:Int = 0 To real_count-1
      Local temp_pix:TPixmap = LockImage(image,i*tile_vars)
      dest_pix.Paste(temp_pix,x,y)
      UnlockImage(image)
      x:+tile_width
   Next
   
   Return dest_pix
End Function


Exe, Source und Mediafile:
http://www.timemill.de/pub/download/iconstrip.zip
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

Suco-X

Betreff: .......

BeitragFr, Nov 25, 2005 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

Es darf also kein TImage sein, sonders muss ein TPixmap sein ... schön dass auch das nicht dokumentiert ist ...


Ein Image ist eine Textur die eine Pixmap vorraussetzt und die Textur des Images wird immer auf eine gerade Größe aufgerundet (32, 64, 128, etc.)
Damit will ich sagen, wieso muss dokumentiert werden das man kein TImage
bei einem Gadget verwenden sollte, die pure Logik verbietet diesen Gedanken doch schon.
Desweiteren ist das LoadAnimImage in deinem Source irgendwie überflüßig.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

M@tzM@N

BeitragFr, Nov 25, 2005 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
So, das habe es jetzt mit SetPanelPixmap gemacht, aber das Bild wird nicht angezeigt. Mein Code:

Code: [AUSKLAPPEN]

Global imgDescription:TGadget
Global description:TPixMap

imgDescription = CreatePanel ( 0, 0, 149, 200, frmMain, PANEL_ACTIVE )

description = LoadPixmap ( "description.gif" )
SetPanelPixmap ( imgDescription, description, PANELPIXMAP_FIT )


Was habe ich da jetzt falsch gemacht?
mfg
M@tzM@N

Du bist Deutschland

Suco-X

Betreff: ......

BeitragFr, Nov 25, 2005 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
.gif
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

M@tzM@N

BeitragFr, Nov 25, 2005 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool! Jetzt funktioniert es Smile

Habe dann jetzt aber ein anderes Problem, ich weiss nicht wie ich *.png transparent machen kann (wird ja unterstützt, aber mir fehlt das Programm)...
mfg
M@tzM@N

Du bist Deutschland

d-bug

BeitragFr, Nov 25, 2005 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Das macht wohl jede übliche Bildbearbeitungssoftware dieser Erde Wink
 

Dreamora

BeitragSa, Nov 26, 2005 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Und falls du nicht weisst wonach genau suchen: GIMP ist zb ein Gratisprogramm Smile (in Photoshop und anderen geht Transparenz über Layertransparenz oder Maskentransparenz, nicht direkt über "transparent Malen", nur um allfällige Probleme in die Richtung ein wenig aufzuklären)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

M@tzM@N

BeitragSa, Nov 26, 2005 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja das habe ich jetzt hinbekommen Smile

Aber BlitzMax lädt die Datei auch ABER es ist nicht wirklich transparent ...
mfg
M@tzM@N

Du bist Deutschland
 

Dreamora

BeitragSa, Nov 26, 2005 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Pixmaps werden nicht transparent.
Nur images und damit ein image transparent wird musst du vorher mittels SetBlend auf den transparenten Rendermodus gehen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

bruZard

BeitragSo, Nov 27, 2005 10:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
Pixmaps werden nicht transparent.
Nur images und damit ein image transparent wird musst du vorher mittels SetBlend auf den transparenten Rendermodus gehen.


Was widerum nicht direkt auf dem GUI geht da dort nur Pixmaps verwendet werden und es keinen Zielhafen für ein SetBlend gibt. Einzige Möglichkeit: Canvas erstellen, GraphicsCanvas holen und bei EVENT_TIMERTICK so bemalen wie man dies unter "normalen" Umständen tun würde.
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image
 

Dreamora

BeitragSo, Nov 27, 2005 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder die Grafiken vorweg entsprechend designen und die MaskColor verwenden ... Das ist zumindest aktuell noch wie Windows und wahrscheinlich auch FLTK das gerne hätte, bis die neuen grafischen Oberflächen kommen
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group