Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   BRCC32 und PNG-Icons (https://www.delphipraxis.net/194978-brcc32-und-png-icons.html)

Codehunter 24. Jan 2018 07:46

BRCC32 und PNG-Icons
 
Hallo!

Ich bin gerade auf ein altes Problem gestoßen, das mir Rätsel aufgibt. Ich habe mir ein Icon erstellt (.ico) in dem Grafik im PNG-Format enthalten ist. Wenn ich das in der Delphi-IDE über die Projektoptionen als Programmsymbol angebe, wird es problemlos akzeptiert. Wenn ich das selbe Icon dagegen in einer .rc-Datei angebe und diese .rc versuche mit BRCC32 zu kompilieren, dann bekomme ich:
Code:
Error icon.rc 1 15: Allocate failed
In der .rc steht folgendes drin:
Code:
MAINICON ICON "mainicon.ico"
Schaue ich aber in die Projektoptionen, dann wird dort genauso BRCC32 als Resourcencompiler verwendet. Also was macht die Delphi-IDE in dem Fall anders?

Im Netz findet man zu dem Problem eigentlich ausschließlich Workarounds in der Form, dass man einen anderen Resourcen-Compiler verwenden soll. Aber da es ja offensichtlich mit Delphi-Bordmitteln doch auch geht, würde ich gerne wissen wie - ohne externe Tools.

Grüße
Cody

Fukiszo 24. Jan 2018 08:44

AW: BRCC32 und PNG-Icons
 
Soweit ich weiß kann man der IDE einen anderen linker zuweisen, also einem externen, das ist das bordmittel.

Lieg ich falsch dann sorry!

Grüße

Redeemer 24. Jan 2018 08:49

AW: BRCC32 und PNG-Icons
 
Die IDE erstellt die .RES-Datei selber, zumindest war das früher so.

Uwe Raabe 24. Jan 2018 08:58

AW: BRCC32 und PNG-Icons
 
Zitat:

Zitat von Codehunter (Beitrag 1391821)
Ich habe mir ein Icon erstellt (.ico) in dem Grafik im PNG-Format enthalten ist.

Kannst du die ICO-Datei mal hier anhängen?

Fukiszo 24. Jan 2018 09:04

AW: BRCC32 und PNG-Icons
 
der fehler liegt bestimmt am compressed png, unkomprimiert müsste es klappen.

Codehunter 24. Jan 2018 10:07

AW: BRCC32 und PNG-Icons
 
Ich konnte den Fehler inzwischen etwas eingrenzen. BRCC32 scheint nicht mit dem PNG-Format mit Alphatransparenzen Probleme zu haben wie ich zuerst dachte, sondern mit dem seit Windows Vista gebräuchlichen Format von 256x256 Pixeln. Wenn ich diesen Riesenklotz aus dem Icon lösche, dann kompiliert BRCC32 problemlos auch Alpha-PNGs zur RES. Das erklärt allerdings immer noch nicht, wie die IDE die entsprechende RES-Datei zusammenbauen kann selbst wenn das 256x256-Bild in der ICO enthalten ist.

Redeemer 24. Jan 2018 10:13

AW: BRCC32 und PNG-Icons
 
BRCC weiß überhaupt nicht, was eine PNG-Datei ist und speichert sie deshalb wie jede andere unbekannte Datei (RT_RCDATA) ab, was völlig selbstverständlich problemlos klappt. Bitmap, Icon/Cursor sowie RIFF-ANI sind die einzigen Grafikformate, die für die RES ein anderes als das originale Format vorsehen, weshalb sich der Compiler nicht inhaltlich um Sachen wie PNG kümmern muss.

Codehunter 24. Jan 2018 10:59

AW: BRCC32 und PNG-Icons
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Redeemer (Beitrag 1391845)
BRCC weiß überhaupt nicht, was eine PNG-Datei ist und speichert sie deshalb wie jede andere unbekannte Datei (RT_RCDATA) ab, was völlig selbstverständlich problemlos klappt. Bitmap, Icon/Cursor sowie RIFF-ANI sind die einzigen Grafikformate, die für die RES ein anderes als das originale Format vorsehen, weshalb sich der Compiler nicht inhaltlich um Sachen wie PNG kümmern muss.

Tja wär ja schön wenns so wäre. Ist es aber nicht. Probiert es selbst aus. Ich habe die betreffenden Dateien als ZIP angehängt. Die beiden Varianten unterscheiden sich nur dadurch, dass in mainicon.ico eine zusätzliche Version mit 256x256 Auflösung enthalten ist und in mainicon2.ico nicht. Einfach die rescompile.bat in der Befehlszeile aufrufen. (brcc32.exe muss im Suchpfad sein!)

PS: Ja, es ist das Icon von HeidiSQL :) Das ist das Projekt an dem ich grade dran bin.

Uwe Raabe 24. Jan 2018 12:19

AW: BRCC32 und PNG-Icons
 
Soweit ich weiß, verwendet die IDE die cgrc.exe - auch wenn der Eintrag in den Projektoptionen etwas anderes vorgaukelt.

Redeemer 24. Jan 2018 12:32

AW: BRCC32 und PNG-Icons
 
Zitat:

Zitat von Codehunter (Beitrag 1391848)
Zitat:

Zitat von Redeemer (Beitrag 1391845)
BRCC weiß überhaupt nicht, was eine PNG-Datei ist und speichert sie deshalb wie jede andere unbekannte Datei (RT_RCDATA) ab, was völlig selbstverständlich problemlos klappt. Bitmap, Icon/Cursor sowie RIFF-ANI sind die einzigen Grafikformate, die für die RES ein anderes als das originale Format vorsehen, weshalb sich der Compiler nicht inhaltlich um Sachen wie PNG kümmern muss.

Tja wär ja schön wenns so wäre. Ist es aber nicht. Probiert es selbst aus. Ich habe die betreffenden Dateien als ZIP angehängt. Die beiden Varianten unterscheiden sich nur dadurch, dass in mainicon.ico eine zusätzliche Version mit 256x256 Auflösung enthalten ist und in mainicon2.ico nicht.

Dein Projekt enthält keine PNG-Datei. Eine PNG in einer Icondatei ist immer noch eine Icondatei, die vom Ressourcenkompiler in diverse Bilddateien (Bitmaps und eben eine PNG) zerlegt wird, die jeweils als RT_ICON (auch: Icon Entry) eingebunden werden. Auch generiert er ein RT_GROUP_ICON mit Verweisen auf diese. Die Einbindung einer PNG-Datei als RT_ICON, das wie erwähnt anders RT_RCDATA oder ein (technisch identischer) benutzerdefinierter String-Typ eigentlich eine Veränderung der Ressource benötigt, ist dem BRCC für PNG unbekannt (korrekt wäre: keine Veränderung, anders als Bitmap-Icon-Entries, die verändert werden müssen), das Ding ist schließlich seit 19 Jahren nicht mehr angefasst worden.

Ghostwalker 24. Jan 2018 13:54

AW: BRCC32 und PNG-Icons
 
Das hat nichts mit PNG zu tun. Die hast du ja schon in ein ICO umgewandelt, von daher kann BRCC32 nix von PNG's wissen :)

Das Problem ist wirklich die 256*256 Größe, mit der BRCC32 nicht klarkommt (das Problem hatte ich auch schon).

Verwende stattdessen den von Uwe erwähnten cgrc.exe oder RC.EXE. Damit tuts :)

CCRDude 24. Jan 2018 15:04

AW: BRCC32 und PNG-Icons
 
Warum sollte BRCC32 nichts von PNG wissen können?

PNG ist ja nicht "nur" die Dateiendung, sondern ein Kompressionsformat. Und ICO ist ein Container, dessen Inhalte im Falle von 256x256 seit Windows Vista optional im PNG-Format kompriminiert sein können.

Die Größe ist also insofern schuld, als das bei dieser Größe PNG eine Option ist. Und Pre-Vista Software bei dieser Größe aber keine PNG-komprimierte Daten erwartet.

Siehe Englische Wikipedia zu PNG, deutsche Wikipedia zu ICO

Codehunter 24. Jan 2018 17:21

AW: BRCC32 und PNG-Icons
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1391858)
Soweit ich weiß, verwendet die IDE die cgrc.exe - auch wenn der Eintrag in den Projektoptionen etwas anderes vorgaukelt.

Wenn dem so ist, was sich aus meiner Perspektive nur schwerlich nachvollziehen lässt, dann würde das den augenscheinlichen Widerspruch erklären, wie die IDE plötzlich mit 256x256 Icons klar kommen kann obwohl die Projektoptionen BRCC32 als Resourcecompiler nennen. Ist wohl auch etwas, das bei Borland damals unter "Compiler Magic" lief :P

Uwe Raabe 24. Jan 2018 17:46

AW: BRCC32 und PNG-Icons
 
Zitat:

Zitat von Codehunter (Beitrag 1391888)
Wenn dem so ist, was sich aus meiner Perspektive nur schwerlich nachvollziehen lässt,

Schau mal nach einem Build unter Meldungen - Erzeugen unter brcc32 Befehlszeile.

Fukiszo 24. Jan 2018 18:04

AW: BRCC32 und PNG-Icons
 
OT: http://www.resource-builder.com/ den benutz ich oftmals zur fehleranalyse in .rc oder .res dateien, manchmal nutz ich's auch zum compilieren, der stellt alles nett dar und bei fehlern erklärt er meist woran's liegt.

Codehunter 25. Jan 2018 10:57

AW: BRCC32 und PNG-Icons
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1391891)
Zitat:

Zitat von Codehunter (Beitrag 1391888)
Wenn dem so ist, was sich aus meiner Perspektive nur schwerlich nachvollziehen lässt,

Schau mal nach einem Build unter Meldungen - Erzeugen unter brcc32 Befehlszeile.

Oh man, Uwe trifft mal wieder voll ins Schwarze. Ich hab nur das brcc32 vorne gesehen. Damit wäre meine Frage geklärt und auch, wie man die .res mit Bordmitteln erzeugen kann. Mir war nicht bewusst dass ein neuerer Resourcencompiler beiliegt.

Redeemer 25. Jan 2018 22:46

AW: BRCC32 und PNG-Icons
 
Zitat:

Zitat von CCRDude (Beitrag 1391875)
Warum sollte BRCC32 nichts von PNG wissen können?

PNG ist ja nicht "nur" die Dateiendung, sondern ein Kompressionsformat. Und ICO ist ein Container, dessen Inhalte im Falle von 256x256 seit Windows Vista optional im PNG-Format kompriminiert sein können.

Weil das Teil von 1999 ist und damals keine PNG-Icons existierten. Bei der Aufspaltung zur Erstellung in Group-Icons und bei den einzelnen Bitmap-Icon-Entries wird eine aktive Anpassung durchgeführt. Der BRCC32 weiß nicht, wie die Anpassung bei PNG-Icon-Entries aussehen soll (Antwort: es gibt keine), daher ist er irritiert.

Codehunter 26. Jan 2018 10:36

AW: BRCC32 und PNG-Icons
 
Zitat:

Zitat von Redeemer (Beitrag 1392030)
Weil das Teil von 1999 ist und damals keine PNG-Icons existierten. Bei der Aufspaltung zur Erstellung in Group-Icons und bei den einzelnen Bitmap-Icon-Entries wird eine aktive Anpassung durchgeführt. Der BRCC32 weiß nicht, wie die Anpassung bei PNG-Icon-Entries aussehen soll (Antwort: es gibt keine), daher ist er irritiert.

Das stimmt nicht ganz. BRCC32 kriegt das mit den PNGs ja durchaus auf die Reihe, nur halt nicht in der Größe 256x256 Pixel. Mein altgedienter XN Resource Editor (auch ein in Delphi geschriebenes Programm) hat mit den 256ern auch seine liebe Not und stürzt ab. Bei kleineren PNGs werden sie immerhin als RCDATA angezeigt.

Redeemer 26. Jan 2018 12:23

AW: BRCC32 und PNG-Icons
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Codehunter (Beitrag 1392076)
Zitat:

Zitat von Redeemer (Beitrag 1392030)
Weil das Teil von 1999 ist und damals keine PNG-Icons existierten. Bei der Aufspaltung zur Erstellung in Group-Icons und bei den einzelnen Bitmap-Icon-Entries wird eine aktive Anpassung durchgeführt. Der BRCC32 weiß nicht, wie die Anpassung bei PNG-Icon-Entries aussehen soll (Antwort: es gibt keine), daher ist er irritiert.

Das stimmt nicht ganz. BRCC32 kriegt das mit den PNGs ja durchaus auf die Reihe, nur halt nicht in der Größe 256x256 Pixel.

Das ist Blödsinn.
Entweder habe ich einen anderen Thread gelesen oder es ging hier zu keiner Zeit um PNG-Dateien mit der Größe 256x256. Diese werden nämlich problemlos eingebunden. Wer's nicht glaubt, Minimalprojekt ist angehängt.
In diesem Thread geht es um Windows-Vista-Icondateien. Die kann man auch in der Größe 144x144 erstellen, dann kommt derselbe Fehler wie im Eröffnungspost (allocate failed), weil es eben eine Windows-Vista-Icondatei ist und der BRCC32 aus dem Jahre 1999 nicht weiß, was eine Windows-Vista-Icondatei ist. Minimalprojekt ist ebenfalls angehängt, entsprechende Zeile auskommentieren.

Codehunter 26. Jan 2018 18:39

AW: BRCC32 und PNG-Icons
 
Zitat:

Zitat von Redeemer (Beitrag 1392108)
Das ist Blödsinn.
Entweder habe ich einen anderen Thread gelesen oder es ging hier zu keiner Zeit um PNG-Dateien mit der Größe 256x256. Diese werden nämlich problemlos eingebunden. Wer's nicht glaubt, Minimalprojekt ist angehängt.
In diesem Thread geht es um Windows-Vista-Icondateien. Die kann man auch in der Größe 144x144 erstellen, dann kommt derselbe Fehler wie im Eröffnungspost (allocate failed), weil es eben eine Windows-Vista-Icondatei ist und der BRCC32 aus dem Jahre 1999 nicht weiß, was eine Windows-Vista-Icondatei ist. Minimalprojekt ist ebenfalls angehängt, entsprechende Zeile auskommentieren.

Achte bitte auf deinen Tonfall. Das Problem der 256er Icons habe ich bereits auf Seite 1 des Threads angesprochen. Zur Bearbeitung/Erstellung des mainicon.ico verwende ich das altehrwürdige Programm IcoFX (genaue Version müsste ich Montag nachschauen). Ich nehme die Original-ICO aus dem HeidiSQL Sourcepaket und die Original-RC aus dem selben Paket. BRCC32 wirft beim Kompilieren dieser RC besagten Fehler. Nehme ich IcoFX und lösche nur das 256er Bild aus der ICO, belasse ansonsten alles so wie es ist, dann kompiliert BRCC32 das ICO problemlos zur RES. Das gilt auch, wenn ich andere Bildgrößen wie 128x128 oder 144x144 anlege. Bei mir verschluckt sich BRCC32 tatächlich nur mit 256er Bildern. Wenn man deiner 1999-Logik folgt, dürfte es eigentlich überhaupt keine PNG-Dateien kompilieren. Denn die kamen überhaupt erst 2007 mit Windows Vista in den Standard (laut Wikipedia).

Redeemer 26. Jan 2018 19:21

AW: BRCC32 und PNG-Icons
 
Zitat:

Zitat von Codehunter (Beitrag 1392187)
Wenn man deiner 1999-Logik folgt, dürfte es eigentlich überhaupt keine PNG-Dateien kompilieren. Denn die kamen überhaupt erst 2007 mit Windows Vista in den Standard (laut Wikipedia).

Sag ich ja, es kompiliert gar keine Windows-Vista-Icons (Icons mit PNG-Icon-Entries). Nur Icons der Größe 256x256 sollten als PNG-Icon-Entry gespeichert werden. Ich würde mal davon ausgehen, dass dein Programm dieser Empfehlung folgt und andere Icons einfach als Windows-Bitmap-Icon-Entry abspeichert, sodass diese fehlerfrei funktionieren. Gute Icon-Software lässt dem Benutzer die Wahl, ob er 256x256 große Icons als PNG-Icon-Entry oder als Windows-Bitmap-Icon-Entry speichert, dein Programm nimmt offenbar immer PNG.
Ein Beispiel, das alle deine Aussagen ("144x144 Icons gehen immer", "BRCC kann keine PNGs der Größe 256x256") widerlegt, habe ich hochgeladen. Schau es dir doch einfach mal an.

Also nochmal:
NameBildformat .ICOGrößeBRCC32
Windows-Vista-Icon-EntryPNGtheoretisch egal, aber nur für 256x256 vorgesehengeht nicht
Standard-Icon-EntryWindows Bitmap plus 1BPP XOR-Array (32BPP: optional)völlig egalgeht

Codehunter 26. Jan 2018 19:43

AW: BRCC32 und PNG-Icons
 
Anschauen geht erst Montag wieder. Ich würde es nicht ausschließen dass IcoFX beim Import von PNGs etwas transkodiert. Mich irritiert dabei aber der Alphakanal, der bei allen Bildern der ICO vorhanden ist. Soweit ich weiß hatten Bitmap- bzw. RIFF-basierte Icons keinen Alphakanal. Daher die Annahme, das es alles PNGs sind.

Redeemer 26. Jan 2018 19:50

AW: BRCC32 und PNG-Icons
 
Ebenso wie normale Bitmaps lassen sich auch Bitmap-Icon-Entries als 32BPP abspeichern. Übrigens: In Windows XP haben praktisch alle Icons einen Alphakanal (sind also 32BPP), aber PNG-Icon-Entries waren damals (2001) noch nicht erfunden. Steht auch so in dem von dir verlinkten Wikipedia-Artikel:
Zitat:

Seit Windows XP sind Icons und Cursors mit Alphakanal möglich. [...] Seit Windows Vista können ICO-Dateien [...] optional als PNG komprimiert werden.
Das Wort "Dateien" ist falsch, Icon-Entry (Einzelbild) wäre besser.

Fukiszo 26. Jan 2018 20:42

AW: BRCC32 und PNG-Icons
 
Liste der Anhänge anzeigen (Anzahl: 1)
mein icon, null farben, 1bit, 8x8


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz