Ein- und Ausgabebibliotheken für Grafikformate?
-
@Yadgar Ist ja schön, dass das so simpel ist. Das wünscht man sich oft, wenn man einfach nur mit Pixeldaten hantieren will.
Die "ominösen 5 Bytes" kann ich dir erklären: die 255 ist der Alpha-Wert des einen Pixel. 255 bedeutet "völlig deckend". Die anderen 4 Bytes kommen von dem
s = sizeof(data);Damit bestimmst du nämlich die Größe des
unsigned char*(Pointer) und der ist auf einem 64-Bit-System üblicherweise immer 8
Versuch es mal mit:
s = x * y * n;... das sollte dem was du vermutlich vorhast näher kommen.
-
Hi(gh)!
@Finnegan sagte in Ein- und Ausgabebibliotheken für Grafikformate?:
@Yadgar Ist ja schön, dass das so simpel ist. Das wünscht man sich oft, wenn man einfach nur mit Pixeldaten hantieren will.
Die "ominösen 5 Bytes" kann ich dir erklären: die 255 ist der Alpha-Wert des einen Pixel. 255 bedeutet "völlig deckend". Die anderen 4 Bytes kommen von dem
s = sizeof(data);Damit bestimmst du nämlich die Größe des
unsigned char*(Pointer) und der ist auf einem 64-Bit-System üblicherweise immer 8
Wenn ich mir n (das ist die Anzahl der Kanäle) ausgeben lasse wird 4 angezeigt! Klar, der in *char gespeicherte Adresswert kann sich von Lauf zu Lauf leicht ändern, was das Byte Nr. 4 erklären würde... dann kann *char aber auch nicht 8 Bytes groß sein, sondern nur 4 (Bytes Nr. 4 bis 7)!
Versuch es mal mit:
s = x * y * n;... das sollte dem was du vermutlich vorhast näher kommen.Gut, als Nächstes dann eine etwas(!) größere GIF-Datei!
-
@Yadgar sagte in Ein- und Ausgabebibliotheken für Grafikformate?:
Wenn ich mir n (das ist die Anzahl der Kanäle) ausgeben lasse wird 4 angezeigt! Klar, der in *char gespeicherte Adresswert kann sich von Lauf zu Lauf leicht ändern, was das Byte Nr. 4 erklären würde... dann kann *char aber auch nicht 8 Bytes groß sein, sondern nur 4 (Bytes Nr. 4 bis 7)!
Ich tu mich echt schwer zu verstehen, welchem Missverständnis du hier unterliegst.
sizeof(char*) == sizeof(void*) == sizeof(data)(dataaus deinem Programm). Du bestimmst nicht die "Größe der Daten", sondern die Größe des Pointers, der auf diese Daten zeigt. Der muss 8 sein, weil du diese Zahl alssals Eintrittsbedingung deiner Ausgabeschleife verwendest und 8 Elemente angezeigt werden (die Schleife läuft von0biss - 1, also0bis7, was 8 Elemente sind). Die Ersten 4 angezeigten Elemente stammen aus der geladenen Datei, die restlichen 4 sind Datenmüll, weil das ein Buffer Overflow ist und du uninitialisierten Speicher liest, der beliegbige Daten beinhalten kann. Nur die ersten 4 bytes wurden vonstbi_loadin dem Speicher abgelegt. Die restlichen 4 waren bereits vorher da (oder sind eventuell irgendwelche Metadaten vonstb, was ich aber für eher unwahrscheinlich halte).
-
Hmm, klassische Anfängerfehler... Wieso muss man dann eigentlich gleich mit Grafik, Image Processing und einer eigenen Lib anfangen - anstatt erstmal die Basics zu lernen? Erinnert mich an Vibe Coding... das scheint nun in zu sein. Wenn ich hoch hinaus will, fange ich ja auch nicht gleich mit dem Himalaya an.
-
@Anon-81275 Lustigerweise ist das genau das, was ich auch gemacht habe, als mir solche Dinge noch nicht klar waren. Und retrospektiv muss ich sagen, dass man meines Erachtens deutlich schneller lernt, wenn man ohne die verdammten Schwimmflügelchen ins Wasser springt. Man wächst mit seinen Aufgaben.
Viel wichtiger finde ich, dass man seine eigenen Grenzen kennt und nicht glaubt, die Weisheit mit Löffeln gefressen zu haben, nur weil man ein paar Grundlagen kennt. Du magst mit dem Kommentar vielleicht vorgehabt haben, toll auszusehen, um dein Ego zu polieren, das dürfte aber nur bei Leuten funktionieren, die dich noch nicht kennen. Für andere kommt das eher anmaßend und altklug rüber (zumindest für mich). Vielleicht hebst du dir solche Kommentare besser für diejenigen Foren auf, in denen du nicht bereits 20 mal gebannt wurdest und wo die Teilnehmer noch nicht wissen, dass du lediglich ein Blender bist.
-
@Finnegan sagte in Ein- und Ausgabebibliotheken für Grafikformate?:
wenn man ohne die verdammten Schwimmflügelchen ins Wasser springt.
Basics sind keine "Schwimmflügelchen", sondern eine solide Basis, ohne die weitergehende Leistungen gar nicht möglich sind... Nenn' mich gerne Spielverderber, aber Quereinsteiger, bzw. Leute, die immer vorgeben, ganz viiiel Ahnung zu haben, die sie in Wirklichkeit aber nicht haben, sind für mich nicht viel mehr als Münchhausener (volkstümlich auch als Hochstapler bekannt).
@Finnegan sagte in Ein- und Ausgabebibliotheken für Grafikformate?:
Für andere kommt das eher anmaßend und altklug rüber (zumindest für mich).
@Finnegan sagte in Ein- und Ausgabebibliotheken für Grafikformate?:
dass du lediglich ein Blender bist.
Bullshit. Versuch' mal wieder, in die Realität zu gelangen. Ich brauche hier keinem Honig ums Maul schmieren. Das kannst du vergessen. Byebye.

-
cppreference won’t really help here, since it documents the C++ standard library rather than external image formats. On Debian I’d look at libraries like libpng, libjpeg-turbo, libwebp and giflib, then link them with g++ and use their headers directly; it’s a lot easier than trying to write all those codecs from scratch.
-
Yes, as Matthew correctly pointed out, the person asking the question is making typical beginner's mistakes and is comparing apples to oranges. Apparently, however, this can no longer be addressed openly without being harshly criticized by other participants in this forum.
-
@Anon-81275
Aber desshalb wechselt man doch nicht die Sprache
.
Alie, mi simple komencos per Esperanto.
-
@Helmut-Jakoby sagte in Ein- und Ausgabebibliotheken für Grafikformate?:
@Anon-81275
Aber desshalb wechselt man doch nicht die Sprache
.
Alie, mi simple komencos per Esperanto.Da kommt dann im nächsten Beitrag oder in einem baldigen Edit der Werbelink. Ziemlich offensichtlicher Spambot, und natürlich ist es Anon, der denkt, der Bot würde ein Gespräch mit ihm führen.