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

Aktuelle Zeit: Do Jul 03, 2025 13:46

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



Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 26, 2003 17:32 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ich bin grad am verzweifeln..
Ich möchte eine *.ico datei einlesen (nicht über TIcon etc, sondern von hand mit nem FileStream!).

Die IconDate ist in dem Format in der Datei:
Code:
icHeader: BitmapInfoHeader;
icColors: Array of RGBQuad;
icXOR: Array of Byte;
icAND: Array of Byte;


Mein Problem ist jetzt... welche länge hat icColors, icXOR und icAND??!
Ich hab tausende seiten durchgegoogelt, aber überall steht nur "die länge von icXOR/icAND ergibt sich durch icHeader"... ich kann damit nich sonderlich viel anfangen, denn icHeader hat mehrere Daten...

Hoffe da hat irgendwer ne Idee... (evtl bin ich grad auch nur übermüdet und hau mir morgen gegen den kopf wenn ich die lösung lese *g*)

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 26, 2003 17:35 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Unter <a href='http://www.wotsit.org' target='_blank'>http://www.wotsit.org</a> gibts ne Datenbank mit Beschreibungen von allen möglichen Dateiformaten.Dort gibst auch genaue Infos zum Icon-Format. (Einfach ico in der Suchmaske eingeben)

Die von dir genannten Attribute hängen logischerweise vom Icontyp ab.Da gibts ja mehrere, z.B. 2/16/256 Farben etc, das wird aber alles in dem auf oben gennanter Seite zum DL angebotenen Dokument über Iconformat erklärt.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 26, 2003 19:04 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

von Wotsit hab ich ja die erklärung... (ist btw diegleiche wie sie im MSDN steht)

Aber da steht halt nur "Die länge des arrays ergibt sich duch das untersuchen der icHeader Member"...

Das das von der Farbanzahl abhängig is etc is mir ja klar... nur in wiefern??

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 26, 2003 19:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Hast du dir auchmal wie in dem Dokument vorgeschlagen die WindowsSDK-Hilfe zu "BITMAPINFOHEADER" angesehn.Dort stehen einige Sachen drin die dir bei deinem Unternehmen helfen können.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 26, 2003 20:20 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
meinst du sizeOf(icHeader)???

Wenn ja, klappt auchnet (zummindest ist das Icon was dabei entsteht ziemlich komisch *g*)

und sizeOf(icXOR) etc wäre für mich irgendwie unsinnig... ;)

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 26, 2003 21:36 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Hi Aya,

ich habe unter <a href='http://services.simac.be/vnc/single/icoFormat.html#MICCUR-DMYID.2' target='_blank'>http://services.simac.be/vnc/single/icoFor...#MICCUR-DMYID.2</a>
eine Beschreibung des ICON - Formates und die Bedeutung der Felder gefunden.

Ich habe es nur überfolgen, scheint aber passend zu sein.

KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 26, 2003 22:08 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ich weiß ja net, entweder bin ich einfach zu doof dazu, oder... KA... *gg*

kann mir mal jemand genau sagen wovon die Array-länge da nun abhängig ist???
und bitte net wieder auf andere Seiten verweisen, denn irgendwie steht auf jeder was anderes.. *schaut verwirrt*

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 26, 2003 22:14 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ich hab das Dokument das Kid Paddle gepostet hat nur mal kurz überflogen, aber eigentlich sind die Längen der Arrays doch selbsterklärend :

icColors :
Dort befindet sich die Farbpalette, die ist natürlich von der Farbtiefe des Icons abhängig, die man ja aus dem Header auslesen kann.
icXOR :
Ich tippe mal auf Width*Height*Bits Per Pixel (siehe Header), denn hier sind die Pixeldaten drinn.
icAND :
1 Bit Maske, Größe = Width*Height

Was dadran jetzt so schwierig war ist mir schleierhaft... steht doch alles in Kid Paddles Dokument Wort für Wort drinne.An so'nem einfachen Dateiformat sollte man eigentlich nicht so schnell scheitern <_<

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 26, 2003 23:17 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Son of Satan hat geschrieben:
Was dadran jetzt so schwierig war ist mir schleierhaft... steht doch alles in Kid Paddles Dokument Wort für Wort drinne.An so'nem einfachen Dateiformat sollte man eigentlich nicht so schnell scheitern <_<

Exakt so hab ich es ja gemacht... aber es funktioniert nicht.

Das Icon was dann dabei rauskommt sind nen paar wirre schwarze linien auf weißem hintergrund.

Au'revoir,
Aya.

PS: Bei CreateIcon().. wo übergibt man da eigentlich die Farbpalette..? also woher weiß Windows welche farben es nehmen soll, bzw wofür is überhaupt das icColors da? *g*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 26, 2003 23:26 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Aya hat geschrieben:
PS: Bei CreateIcon().. wo übergibt man da eigentlich die Farbpalette..? also woher weiß Windows welche farben es nehmen soll, bzw wofür is überhaupt das icColors da? *g*

Farbpalette übergibt man da keine, allderings aber die Anzahl der Bits pro Pixel.Ich nehme mal an, das dann entweder die Windowsstandardpalette genommen wird, oder man diese später mittels einer HPalette selbst anpassen kann.

Das iColors ist (soweit ich das dem Dokument entnehmen) konnte nix anderes wie die Palette des Icons.

P.S. : Poste mal den Code mit dem du das Icon lädst....dann findet sich der Fehler vielleicht.

P.P.S. : Warum willst du das Icon unbedingt über nen Stream einlesen statt z.B. über die Windowsfunktionen wie z.B. LoadIcon oder CreateIconFromResource ?

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 26, 2003 23:32 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
huhu,

na gut.. hier der Code :)

Code:
  1.  &nbsp;F:=TFileStream.Create(FileName,fmOpenRead);
  2.  &nbsp;F.Read(Header.idReserved,SizeOf(Header.idReserved));
  3.  &nbsp;F.Read(Header.idType,SizeOf(Header.idType));
  4.  &nbsp;F.Read(Header.idCount,SizeOf(Header.idCount));
  5.  &nbsp;SetLength(Header.idEntries,Header.idCount);
  6.  &nbsp;for i:=1 to Header.idCount do begin
  7.  &nbsp; &nbsp;F.Read(Header.idEntries[i-1].bWidth,SizeOf(Header.idEntries[i-1].bWidth));
  8.  &nbsp; &nbsp;F.Read(Header.idEntries[i-1].bHeight,SizeOf(Header.idEntries[i-1].bHeight));
  9.  &nbsp; &nbsp;F.Read(Header.idEntries[i-1].bColorCount,SizeOf(Header.idEntries[i-1].bColorCount));
  10.  &nbsp; &nbsp;F.Read(Header.idEntries[i-1].bReserved,SizeOf(Header.idEntries[i-1].bReserved));
  11.  &nbsp; &nbsp;F.Read(Header.idEntries[i-1].wPlanes,SizeOf(Header.idEntries[i-1].wPlanes));
  12.  &nbsp; &nbsp;F.Read(Header.idEntries[i-1].wBitCount,SizeOf(Header.idEntries[i-1].wBitCount));
  13.  &nbsp; &nbsp;F.Read(Header.idEntries[i-1].dwBytesInRes,SizeOf(Header.idEntries[i-1].dwBytesInRes));
  14.  &nbsp; &nbsp;F.Read(Header.idEntries[i-1].dwImageOffset,SizeOf(Header.idEntries[i-1].dwImageOffset));
  15.  &nbsp;end;
  16.  &nbsp;for i:=Low(Header.idEntries) to High(Header.idEntries) do begin
  17.  &nbsp; &nbsp;F.Seek(Header.idEntries[i].dwImageOffset,SoFromBeginning);
  18.  &nbsp; &nbsp;F.Read(Header.idEntries[i].IconImage.icHeader,SizeOf(Header.idEntries[i].IconImage.icHeader));
  19.  
  20. //Bis hier stimmt alles 100%ig!!
  21.  
  22.  &nbsp; &nbsp;SetLength(Header.idEntries[i].IconImage.icColors,Header.idEntries[i].IconImage.icHeader.biBitCount * 4);
  23.  &nbsp; &nbsp;for j:=0 to Header.idEntries[i].IconImage.icHeader.biBitCount - 1 do begin
  24.  &nbsp; &nbsp; &nbsp;F.Read(Header.idEntries[i].IconImage.icColors[j].rgbRed,SizeOf(Header.idEntries[i].IconImage.icColors[j].rgbRed));
  25.  &nbsp; &nbsp; &nbsp;F.Read(Header.idEntries[i].IconImage.icColors[j].rgbGreen,SizeOf(Header.idEntries[i].IconImage.icColors[j].rgbGreen));
  26.  &nbsp; &nbsp; &nbsp;F.Read(Header.idEntries[i].IconImage.icColors[j].rgbBlue,SizeOf(Header.idEntries[i].IconImage.icColors[j].rgbBlue));
  27.  &nbsp; &nbsp; &nbsp;F.Read(Header.idEntries[i].IconImage.icColors[j].rgbReserved,SizeOf(Header.idEntries[i].IconImage.icColors[j].rgbReserved));
  28.  &nbsp; &nbsp;end;
  29.  
  30.  &nbsp; &nbsp;SetLength(Header.idEntries[i].IconImage.icXOR,Round((Header.idEntries[i].bWidth * Header.idEntries[i].bHeight) * Header.idEntries[i].IconImage.icHeader.biBitCount));
  31.  &nbsp; &nbsp;for j:=Low(Header.idEntries[i].IconImage.icXOR) to High(Header.idEntries[i].IconImage.icXOR) do
  32.  &nbsp; &nbsp; &nbsp;F.Read(Header.idEntries[i].IconImage.icXOR[j],SizeOf(Header.idEntries[i].IconImage.icXOR[j]));
  33.  
  34.  &nbsp; &nbsp;SetLength(Header.idEntries[i].IconImage.icAND,Round((Header.idEntries[i].bWidth * Header.idEntries[i].bHeight)));
  35.  &nbsp; &nbsp;for j:=Low(Header.idEntries[i].IconImage.icAND) to High(Header.idEntries[i].IconImage.icAND) do
  36.  &nbsp; &nbsp; &nbsp;F.Read(Header.idEntries[i].IconImage.icAND[j],SizeOf(Header.idEntries[i].IconImage.icAND[j]));
  37.  &nbsp;end;
  38.  &nbsp;F.Free;
  39.  
  40.  &nbsp;Ico:=CreateIcon(hInstance,
  41.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Header.idEntries[0].bWidth,
  42.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Header.idEntries[0].bHeight,
  43.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Header.idEntries[0].IconImage.icHeader.biPlanes,
  44.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Header.idEntries[0].IconImage.icHeader.biBitCount,
  45.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Header.idEntries[0].IconImage.icAND,
  46.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Header.idEntries[0].IconImage.icXOR
  47.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;);
  48.  


Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 27, 2003 17:21 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hat keiner ne Idee??? (Bei dem ja ach so leichten Dateiformat *grinst fies*) :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 29, 2003 00:27 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Ich hab doch extra gesagt das ich es NICHT mit TIcon etc machen möchte... ;)
Nen direkten grund gibt es nich, ausser das ich z.Z. viel mit allen möglichen DateiFormaten rumspiele *g*

Hat denn keiner ne ahnung wo da oben mein fehler liegt??? :(

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Allgemein


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.010s | 14 Queries | GZIP : On ]