


Eine Bibliothek erstellen, die Bilddateien mit Ebenen ohne Datenverlust liest und schreibt
Für eine Binärformat-Bibliothek für Bilder mit Ebenen. Sie trennt das binäre Lesen von der Benutzer-API, liest Abschnitte der Reihe nach, behält unbekannte Daten, baut Ebenengruppen neu auf, testet durch Lesen, Schreiben und erneutes Lesen und veröffentlicht automatisch.
Diese KI-Regeln verwenden
## Nur die für die Aufgabe nötigen Abhängigkeiten installieren und die Projektbefehle nutzen
Lesen Sie die Dokumentation für Mitwirkende, bevor Sie Code ändern.
Verwenden Sie die Umgebungsverwaltung und die Aufgabenbefehle des Versionsarchivs, statt Werkzeuge aus einer sachfremden Laufzeitumgebung aufzurufen.
Richten Sie nur die für die Aufgabe erforderlichen Abhängigkeitsgruppen ein:
- installieren Sie die vorgegebenen Entwicklungsabhängigkeiten für Analyse und Prüfungen;
- fügen Sie die wahlweise Darstellungsgruppe hinzu, wenn Bildzusammensetzung oder Rasterung erforderlich sind;
- beziehen Sie Dokumentationsgruppen nur beim Erstellen der Dokumentation ein;
- rechnen Sie damit, dass wahlweise wissenschaftliche oder zeichnerische Pakete bei manchen neuen Kombinationen aus Laufzeitumgebung und Betriebssystem nicht verfügbar sind.
Verwenden Sie die verbindlichen Befehle, um:
- kompilierte Erweiterungsmodule und Auslieferungserzeugnisse zu erstellen;
- die vollständige Prüfreihe mit Abdeckungsmessung auszuführen;
- eine einzelne Prüfung anhand ihrer Knotenkennung auszuführen;
- Prüfungen ohne Abdeckungsmessung auszuführen, wenn gezielt Verhalten gemessen wird;
- Quelltextprüfung, Formatierung und statische Typprüfung auszuführen;
- die HTML-Dokumentation zu erstellen und ihr dokumentiertes Ausgabeverzeichnis zu prüfen.
Behandeln Sie wahlweise Darstellungsabhängigkeiten nicht als Kernanforderungen der Analyse.
Geben Sie eine klare Installationsanweisung aus, wenn ein wahlweiser Vorgang ohne seine Abhängigkeiten angefordert wird.
## Das binäre Lesen und Schreiben auf niedriger Ebene von der Benutzer-API trennen
Halten Sie die untergeordnete Binäranalyse von der übergeordneten Benutzer-API getrennt.
Die untergeordnete Schicht:
- liest und schreibt das rohe Binärformat nach dessen Spezifikation;
- bildet Dateiköpfe, Datensätze, markierte Blöcke, Beschreibungen, Bildressourcen, Masken, Kanäle und Komprimierungsdaten ab;
- stellt ausdrückliche Serialisierungsmethoden `read(fp)` und `write(fp)` bereit;
- bewahrt unbekannte Daten auf, die noch nicht gedeutet werden können.
Die übergeordnete Schicht:
- umschließt untergeordnete Dokumentstrukturen mit benutzerfreundlichen Schnittstellen;
- stellt benutzerorientierte Objektbäume aus flachen Binärdatensätzen wieder her;
- stellt Ebenentypen, Effekte, Masken, Darstellung und Dokumentvorgänge bereit;
- verschiebt aufwendige Analyse bis zum Zugriff auf die Daten, sofern der Vertrag dies erlaubt.
Interner Code soll konkrete untergeordnete Definitionen aus ihren jeweiligen Definitionsmodulen einbinden.
Öffentliche Anwender sollen die unterstützten Exporte des Pakets verwenden.
Lassen Sie keine Einzelheiten der untergeordneten Darstellung ohne einen Grund der Kompatibilität in öffentliche Methoden einfließen.
## Die Abschnitte der Datei der Reihe nach lesen und schreiben und unbekannte Daten behalten
Behandeln Sie Reihenfolge, Längen, Signaturen und Zahlenbreiten der Abschnitte als Teil des Dateiformatvertrags.
Eine typische geschichtete Bilddatei enthält fünf aufeinanderfolgende Abschnitte:
1. Einen Dateikopf fester Größe mit Signatur, Version, Abmessungen, Kanälen und Farbmodus.
2. Farbmodusdaten wie indizierte Farbpaletten.
3. Bildressourcen wie Farbprofile, Hilfslinien und Vorschaubilder.
4. Ebenen- und Maskeninformationen mit Ebenendatensätzen, Kanaldaten und markierten Blöcken.
5. Verflachte zusammengesetzte Bilddaten.
Prüfen Sie feste Kopfgrößen wie 26 Byte, wenn die Spezifikation sie verlangt.
Lesen und schreiben Sie die Abschnitte in ihrer Reihenfolge; leiten Sie Grenzen nicht aus bequemen Objekten im Arbeitsspeicher ab.
Geben Sie aus Serialisierungsmethoden die Anzahl der geschriebenen Byte zurück, damit Aufrufende die Größenrechnung prüfen können.
Bewahren Sie unbekannte Nutzdaten bei einem Lese-Schreib-Lese-Durchlauf in Form von Bytes auf, statt sie zu verwerfen.
## Ebenengruppen aus der flachen Liste von Datensätzen neu aufbauen
Wenn das Format eine Hierarchie als flache Liste speichert, deuten Sie ausdrückliche Grenzdatensätze, statt nur die Nachbarschaft anzunehmen.
Erkennen Sie Kennzeichen für Gruppenanfang und Gruppenende, und stellen Sie Eltern-Kind-Beziehungen mit einem Stapel oder einem gleichwertigen geprüften Zustandsautomaten wieder her.
Prüfen Sie mindestens:
- gewöhnliche Datensätze außerhalb von Gruppen;
- eine Gruppe mit mehreren Kindelementen;
- verschachtelte Gruppen;
- leere Gruppen;
- fehlerhafte oder nicht ausgeglichene Grenzkennzeichen;
- die Bewahrung der ursprünglichen Datensatzreihenfolge.
Halten Sie die flache untergeordnete Datensatzliste für die Serialisierung verfügbar und stellen Sie zugleich über die übergeordnete API einen Baum bereit.
Die Wiederherstellung des Baums darf keine sachfremden Binärdatensätze verändern.
## Markierte Blöcke über ein Register ergänzen und nicht unterstützte Blöcke unverändert lassen
Geben Sie Binärstrukturen einen gemeinsamen Grundvertrag mit Lesen auf Klassenebene und Schreiben auf Instanzebene.
Setzen Sie komplexe Strukturen rekursiv aus kleinen Grundelementen zusammen.
Verwenden Sie typisierte Datenklassenfunktionen einheitlich für:
- erzeugte Initialisierer;
- Feldprüfung;
- Typhinweise;
- gesteuerte Darstellungen;
- bei Bedarf vorhersehbare Umwandlung in Tupel oder Folgen.
Halten Sie Prüffunktionen mit den Typangaben im Einklang, und verwenden Sie für verkettbare oder klassenbewusste Konstruktoren einen Rückgabetyp des eigenen Instanztyps.
Für erweiterbare markierte Blöcke:
- verwenden Sie einen Kennzeichnungsschlüssel fester Breite und die zugehörigen Nutzdaten;
- ordnen Sie bekannte Kennzeichnungen mithilfe eines Registers den Verarbeitungsklassen zu;
- prüfen Sie eine Kennzeichnung, bevor Sie deren typisierte Daten lesen;
- bewahren Sie nicht unterstützte Blöcke für späteres Schreiben unverändert auf;
- trennen Sie den bequemen öffentlichen Zugriff vom internen Datensatzzugriff.
Registrieren Sie keine Verarbeitungsklasse, die Bytes verbraucht, die sie nicht getreu zurückschreiben kann.
## Komprimierung und Pixelberechnungen beschleunigen, ohne den Rückfallweg zu beschädigen
Messen Sie leistungsabhängige Pfade, bevor Sie sie optimieren.
Verwenden Sie verfügbare kompilierte Kodierer für aufwendige Komprimierung oder Dekomprimierung, behalten Sie jedoch eine korrekte, ausschließlich in der Programmiersprache umgesetzte Rückfalllösung bei.
Verwenden Sie bedarfsgesteuertes Laden für Masken, Effekte und Kanaldaten, wenn eine verzögerte Analyse die Bedeutung bewahrt.
Verwenden Sie Vektorisierung von Datenfeldern für umfangreiche Pixel- und Mischmodusberechnungen, wenn sie den Durchsatz verbessert.
Jede Optimierung muss Folgendes bewahren:
- die Kompatibilität der Binärausgabe;
- das Fehlerverhalten;
- deterministische Ergebnisse;
- die nicht optimierte Rückfalllösung;
- die Unterstützung für Umgebungen, in denen kompilierte oder wahlweise Abhängigkeiten nicht verfügbar sind.
Prüfen Sie optimierte Umsetzungen und Rückfallumsetzungen anhand derselben Prüfdaten.
Ändern Sie Ergebnisse nicht stillschweigend, um Geschwindigkeit zu gewinnen.
## Änderungen durch Lesen, Schreiben und erneutes Lesen testen und Typhinweise ergänzen
Ordnen Sie die Prüfungen entsprechend der Paketstruktur an und trennen Sie untergeordnete Binärprüfungen von übergeordneten API-Prüfungen.
Bewahren Sie repräsentative Binärprüfdaten in einem eigenen Prüfdatenverzeichnis auf und parametrisieren Sie die Prüfungen über mehrere Dateien.
Verwenden Sie die Lese-Schreib-Lese-Prüfung als vorrangige Invariante:
1. Lesen Sie die Binärdatei.
2. Ändern Sie ein kontrolliertes Feld.
3. Schreiben Sie die Datei.
4. Lesen Sie das Ergebnis erneut.
5. Prüfen Sie die beabsichtigte Änderung und die Bewahrung sachfremder Daten.
Ergänzen Sie jede neue Funktionssignatur um korrekte Typhinweise.
Halten Sie Prüffunktionen von Datenklassen mit den Typangaben im Einklang.
Verwenden Sie den Kompatibilitätstyp des Vorhabens für Methoden, die eine Instanz ihrer eigenen Klasse zurückgeben.
Führen Sie während der Entwicklung gezielte Prüfungen aus, danach vor dem Abschluss die einschlägige vollständige Prüfreihe sowie Quelltextprüfung, Formatierung und Typprüfung.
Prüfen Sie Änderungen der Abdeckung, statt allein den Abdeckungsanteil als Beweis für Richtigkeit zu verwenden.
## Über den automatischen Ablauf veröffentlichen und nicht Unterstütztes klar benennen
Wählen Sie Veröffentlichungsversionen nach dem dokumentierten Versionsstandard des Vorhabens, einschließlich endgültiger, Vorab- und Nachveröffentlichungsformen.
Fassen Sie die Änderungen seit der vorherigen Versionskennzeichnung im Änderungsprotokoll unter der Überschrift der neuen Version zusammen.
Verwenden Sie das genaue Muster für Veröffentlichungszweige, das die automatische Kennzeichnung verlangt.
Stellen Sie einen Veröffentlichungsantrag an den Hauptzweig und führen Sie ihn erst nach Genehmigung zusammen.
Lassen Sie die eingerichtete Automatik den genau zusammengeführten Versionsstand kennzeichnen, Auslieferungspakete erstellen, die auf dem Dienst bereitgestellte Veröffentlichung anlegen und im Paketverzeichnis veröffentlichen.
Erstellen Sie keine manuelle Kennzeichnung, wenn der Veröffentlichungsablauf die Kennzeichnung übernimmt.
Stellen Sie sicher, dass die Automatik-Zugangsdaten nur die zum Auslösen nachgelagerter Arbeitsabläufe erforderlichen Mindestberechtigungen besitzen, und legen Sie sie niemals offen.
Bevor Sie behaupten, eine Funktion arbeite, prüfen Sie die dokumentierten Grenzen für:
- Textdarstellung ohne verfügbares Schriftverarbeitungsmodul;
- unterstützte und nicht unterstützte Anpassungsvorgänge;
- die Teilmenge der umgesetzten Ebeneneffekte;
- das Auslesen gegenüber dem Bearbeiten eingebetteter Objekte;
- die Bewahrung unbekannter Daten ohne deren Deutung.
Benennen Sie nicht unterstütztes Verhalten ausdrücklich, statt es stillschweigend anzunähern.
Schließen Sie mit einem Bericht über ausgeführte Prüfungen, nicht geprüfte wahlweise Ausführungspfade, Kompatibilitätsrisiken und alle Einschränkungen, die die angeforderte Änderung betreffen.
