Nur wenige Menschen interessieren sich jetzt nicht mehr für ein oder zwei Kilobyte. Aber es gibt solche Leute, und diese Notiz wurde nur für einen solchen
Nerd einer Person geschrieben. )
In diesen Einzelfällen, in denen ich ein ausdrucksstarkes Symbol (.ico) der Anwendung aufzeichnen und gleichzeitig Bytes speichern musste, habe ich den folgenden Hack verwendet: Ich habe das Bild im 16-Farben-Modus aufgenommen - aber! - nicht in der üblichen festen Palette, sondern in der adaptiven.
Was gibt es? Symbol 48x48, 1-Bit-Transparenz, 256 Farben = 3774 Bytes, es ist auch in 16 Farben = 1662 Bytes. Die Verstärkung beträgt 2 Kilobyte bei einer leichten Abnahme der Bildqualität.

Ein Beispiel. Von links nach rechts:
- 256-Farben-Original
- eine feste Standard-16-Farben-Palette (und hier habe ich ein paar Minuten lang eine Luke aufgenommen, damit das Bild zumindest ein anständiges Aussehen hat)
- adaptive 16-Farben-Palette + Schraffur (Dithering).
Wie funktioniert es Seltsamerweise enthält das 16-Farben-Symbol immer eine Palette. Das heißt, 99,9% der alten Symbole enthalten genau dieselbe 64-Byte-Farbtabelle (4 Byte pro Farbe). Und ja - es stellt sich heraus, dass es neu programmiert werden kann.
Leider bin ich mit dem Programm nicht vertraut, das mit solchen Symbolen vollständig funktionieren kann. Daher hier das Rezept, wie Sie ein "minderwertiges" Symbol erstellen: Nehmen Sie IrfanView, laden Sie ein Bild hinein: entweder eine vorbereitete 16-Farben-Farbe oder reduzieren Sie die Anzahl der Farben direkt darin: Menü - Bild - Farbtiefe reduzieren ... - 16 Farben. Jetzt: Menü - Speichern unter ... - .ico-Format auswählen. Ist das alles Nein, nicht alle: Irfan View weiß nicht, wie man mit Transparenz arbeitet, es muss manuell in einem anderen Programm wiederhergestellt werden. Microangelo Studio kann solche Symbole laden und bearbeiten (leider ist es nicht möglich, eine solche Bibliothek von Grund auf neu zu erstellen, genau wie das Erstellen solcher Symbole von Grund auf). Wir laden das Symbol in Microangelo und ... vielleicht erhalten wir sofort ein Warnfenster über die "falsche Palette" - was dies in der Praxis bedeutet, wird später beschrieben. Mit den Werkzeugen „Füllen“ und „Bleistift“ markieren wir die transparenten Zonen. aufschreiben; fertig!
Das habe ich vor ungefähr zehn Jahren getan. Nachdem ich mir die Microangelo-Palette genau angesehen habe, habe ich jetzt Fragen. Was ist diese seltsame Palette, 18 Farben? Wie können Sie 18 Farben in einer Datei speichern? Die Zahl ist nicht rund, meine Herren, Programmierer tun dies nicht; es ist einfach nicht bequem für sie. )) Es ist zu sehen, dass die Palette einfarbige 16 Farben und zwei Servicefarben enthält: "transparent" und "invers". Was für eine "Umkehrung"? - Wenn eine solche Farbe auftritt, zeigt sie das Negativ dessen an, was darunter liegt. es wird am häufigsten in Cursorn verwendet; und der Cursor ist im Wesentlichen und in der Struktur der Datei auch ein Symbol. Aber wie werden all diese Farben gespeichert? Wenn gewöhnliche Bildpunkte in 4 Bit (16 Farben) gepackt sind, kann Transparenz nur als separate Bitmaske gespeichert werden (1 Bit für jeden Bildpunkt). Okay, wo ist dann die Inversion gespeichert? Noch eine Maske oder was? Nicht wirtschaftlich, aber möglich ... Zählen wir.
Symbol 48x48, 16 Farben, 1 Bild. Die Dateigröße beträgt 1662 Bytes. Was ist drin? Ich stelle mir die Feinheiten schwach vor, versuche es aber herauszufinden. Der Hauptteil, das Bild selbst: 48 * 48/2 = 1152 Bytes. Palette: 16 * 4 = 64 Bytes. Die Transparenzmaske ist 48 * 48/8 = 288 Bytes. Header .ico, offiziell = 6 Bytes. Beschreibung des Rahmens (1 Stk.) Aus der Dokumentation = 16 Bytes. Gesamt: 1152 + 64 + 288 + 6 + 16 = 1526. Wahrscheinlich gibt es noch etwas anderes, da die tatsächliche Dateigröße größer ist - aber das spielt keine Rolle. Eine andere Sache ist wichtig, der Rest der "Inkonsistenz" ist klein: 136 Bytes, und es erlaubt offensichtlich nicht, eine weitere Bitmaske mit einer Größe von 288 Bytes zu platzieren. Also ... die umgekehrte Farbe ist irgendwie in das Bild selbst eingebettet. Vielleicht können Sie jetzt selbst erraten, wie sie es gemacht haben?
Und sie haben es anscheinend so gemacht: Im ursprünglichen Windows (es scheint, beginnend mit Win 95OSR2 vollständig und in Win XP und neueren bereits teilweise), streng genommen in den Symbolen und Cursorn - es gab keine wirklich transparente Farbe. Wenn die Alpha-Maske Folgendes anzeigt: Der aktuelle Cursor / Symbolpunkt ist "transparent" - die Farbe unter dem Cursor / Symbol wurde übernommen und XOR-verknüpft ("exklusiv" oder ""; möglicherweise gab es nur eine Subtraktion) - Aufmerksamkeit! - mit der aktuellen Punktfarbe aus der Symbolpalette.
Was ist das Wenn es die erste Farbe war (Schwarz in einer festen Palette), hat XOR „nichts“ mit dem Hintergrund gemacht - die Farbe wurde nur transparent. Wenn es die letzte Farbe war (in einer festen Palette - Weiß), änderte sich die Farbe vollständig und wurde zu einem Negativ. Dies ist das ganze Geheimnis, wie „18 Farben“ gespeichert wurden ... Das heißt noch einmal: „transparent“ = schwarze (+) Alpha-Maske, „invers“ = weiße (+) Alpha-Maske. Und jetzt - lassen Sie uns über Störungen sprechen.
In der oben von Microangelo erwähnten Warnung heißt es: "Sie haben keine vollwertigen weißen und schwarzen Farben in der Palette, die Arbeit mit Transparenz ist falsch!" In der Tat kann unsere adaptive Palette durchaus auf Schwarz oder Weiß verzichten. Wie wird dann Transparenz funktionieren? Oh, genau wie wir es erwarten: Es wird etwas Farbe aus der Palette (zum Beispiel Grün), "XOR" mit dem Hintergrund, und wir werden eine schöne lila Farbe anstelle von Transparenz erhalten. )) Oder ein anderes Beispiel - Schwarz ist versehentlich an die Stelle der letzten Farbe in der Palette gefallen: und die „Inversion“ wurde zur üblichen vollwertigen Transparenz.
Beispiel: Links ist eine Standardpalette, rechts ist neu programmiert. Auf der linken Seite funktionieren Transparenz (P) und Inversion (I) so, wie sie sollten. rechts - offensichtlich nicht.Wir können jedoch alle diese Reize von Symbolen nur im ursprünglichen Windows beobachten. Moderne Betriebssysteme wie Win 10 ignorieren die Farben der Palette, und die Bitmaske „Transparenz“ funktioniert immer genauso wie Transparenz in ihrer reinsten Form: Es gibt kein XOR und auch keine Inversion. Im Cursor-Anzeigemechanismus besteht jedoch immer noch Kompatibilität - dort funktioniert eine vollwertige gute alte wirtschaftliche Schaltung; "Warm, Lampe" und ... nur wenige Menschen verstehen und brauchen.
Beispiel: Unterschiedliche Anzeige derselben Symbole in Windows XP und Windows 7.