Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 16:44

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: TIcon Rendern
BeitragVerfasst: Di Jan 16, 2007 00:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Hallöle!

Ich habe ein Problem (an sich nix neues :) )

Und zwar habe ich in einem OpenGL-Programm vor eine Dateiübersicht zu machen, mit den Windows-Icons. Die hab ich auch schon als TIcon bzw. als Handle vorliegen. Im Moment kopiere ich diese dann in ein TBitmap und übergebe das an TglBitmap. Ist natürlich doof, weil ich da immer einen Rand dran habe. Einfach einen Alpha-Test nehmen kann ich auch nicht, TIcon hat ja die Transparenzdaten nicht umsonst.

So, wie mache ich das nun? Bzw. wie muss die Funktion aussehen (nehme ich mal an), die ich an LoadFromFunc übergeben muss?

Danke schonmal,
Martok

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 16, 2007 00:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Das Sinnvollste wäre eigentlich, wenn du die kleinen Icons in eine größere Textur einbastelst in der sich nur Icons befinden. Aber einen anderen weg als über die Bitmaps wirst du wohl nicht finden. Einbasteln könntest du ein anderen Bit recht einfach mit TBitmap.Scanline und TglBitmap32.Scanline. Einfach rein kopieren. (Die Daten der Textur dürfen dann aber nicht freigegeben werden) Wenn du dann noch die Richtigen Koordinaten setzt ist alles in Butter.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 16, 2007 00:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Danke für deine Antwort.
Lossy eX hat geschrieben:
Einbasteln könntest du ein anderen Bit recht einfach mit TBitmap.Scanline und TglBitmap32.Scanline. Einfach rein kopieren.

Kann an der Uhrzeit liegen, aber den Satz versteh ich nicht ;)

Jedenfalls. So wie ich das jetzt verstanden habe, ist da aber immer noch nix transparent dran, oder? Das Problem ist ja, dass ich nicht wirklich an die Infos ran komme.

Aha: Es gibt eine Funktion GetIconInfo(). So richtig versteh ich das aber nicht, und finden tu ich da auch nix zu...

Wie auch immer, ich geh jetzt ins Bett. Mal sehen, wie die Sache morgen aussieht :)

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 16, 2007 09:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Martok hat geschrieben:
Lossy eX hat geschrieben:
Einbasteln könntest du ein anderen Bit recht einfach mit TBitmap.Scanline und TglBitmap32.Scanline. Einfach rein kopieren.

Kann an der Uhrzeit liegen, aber den Satz versteh ich nicht ;)

Kann dir da nur zustimmen. Ich war müde und es war spät. :D

Martok hat geschrieben:
Aha: Es gibt eine Funktion GetIconInfo(). So richtig versteh ich das aber nicht, und finden tu ich da auch nix zu...

Diese Methode ist genau das was du brauchst. MSDN GetIconInfo. Hatte das mit dem Transparenten überlesen. Aber hier mal ein Code der die Verwendung verdeutlichen sollte.

Code:
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   Ic: TIcon;
  4.   IconInfo: TIconInfo;
  5.  
  6.   Bmp: TBitmap;
  7. begin
  8.   Ic := TIcon.Create;
  9.   try
  10.     Ic.LoadFromFile('C:\test.ico');
  11.  
  12.     GetIconInfo(Ic.Handle, IconInfo);
  13.  
  14.     Bmp := TBitmap.Create;
  15.     try
  16.       Bmp.Handle := IconInfo.hbmColor;
  17.       Image1.Picture.Assign(bmp);
  18.  
  19.       Bmp.Handle := IconInfo.hbmMask;
  20.       Image2.Picture.Assign(bmp);
  21.     finally
  22.       bmp.Free;
  23.     end;
  24.   finally
  25.     Ic.Free;
  26.   end;
  27. end;

Habe hier leider nur Win2k aber unter XP sollte die Maske kein Monochromes Bild sein sondern sollte auch echte Transparenz enthalten. Sofern das von dem Icon unterstützt wird. Aber das tun viele auch wenn es nicht sofort offensichtlich sichtbar ist.

Zum Auslesen der Daten das Pixelformat de Bitmaps auf pf24Bit stellen und dann über Scanlines ansprechen. Diese kannst du dann einfach so in die glBitmap kopieren, denn meine Klassen unterstützen auch die Eigenschaft Scanlines. Aber das sollte kein großes Problem sein denke ich. Wenn es doch nicht klappen sollte weißt du ja was zu tun ist. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 16, 2007 15:36 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Lossy eX hat geschrieben:
Martok hat geschrieben:
Lossy eX hat geschrieben:
Einbasteln könntest du ein anderen Bit recht einfach mit TBitmap.Scanline und TglBitmap32.Scanline. Einfach rein kopieren.

Kann an der Uhrzeit liegen, aber den Satz versteh ich nicht ;)

Kann dir da nur zustimmen. Ich war müde und es war spät. :D

Na dann bin ich beruhigt ;)

Lossy Ex hat geschrieben:
Habe hier leider nur Win2k aber unter XP sollte die Maske kein Monochromes Bild sein sondern sollte auch echte Transparenz enthalten. Sofern das von dem Icon unterstützt wird. Aber das tun viele auch wenn es nicht sofort offensichtlich sichtbar ist.

Zum Auslesen der Daten das Pixelformat de Bitmaps auf pf24Bit stellen und dann über Scanlines ansprechen. Diese kannst du dann einfach so in die glBitmap kopieren, denn meine Klassen unterstützen auch die Eigenschaft Scanlines. Aber das sollte kein großes Problem sein denke ich. Wenn es doch nicht klappen sollte weißt du ja was zu tun ist. ;)


Danke für den Code, werd ich mal testen. Bei mir gibts auch nur W2k (aber ohne leider), von daher...
Der Rest sollte machbar sein ;)

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 16, 2007 23:22 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Lossy eX hat geschrieben:
Wenn es doch nicht klappen sollte weißt du ja was zu tun ist. ;)

Ähm, ja. :oops:

Wenn ich dem per Handle zugewiesenen Bitmap an die Scanlines will, geht das leider nicht? Beim setzen von Pixelformat wird das Bitmpamp gelöscht.
Auch das vorherige kopieren in ein anderes Bitmap bringt nichts, es gibt ne schöne weiße Fläche...
Interessant finde ich ja, dass das dann im TImage geht...

Scheint so, als ob das TBitmap nicht wirklich an dem Handle hängt.

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 17, 2007 17:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hmmm. Okay. Muss gestehen, dass ich das so bisher noch nicht probiert habe. Aber was auf jeden Fall gehen sollte ist, wenn du eine 32 Bittiges Bitmap erstellst, was die selben Ausmaße hat etc und dann das mit dem Handle einfach drauf zeichnen. Dann solltest du deine Daten in einem Bitmap mit ScanlineZugriff haben.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]