JPEG Bilder die 2te
-
Enno schrieb:
ImgFileliefert mir das JPEG Bild. D.h. das ist eine eigene Klasse. Meinst du mit direktImgFilezu benutzen, dass ich das vererben soll? Ansonsten hab ich das grade nicht verstanden.Nein, du schreibst ja auch
int i = 5;und nicht
int* i = new int(5);Wenn du keine dynamische Speicherverwaltung brauchst, benutze sie nicht. In deinem Fall solltest du die Konstruktor-Initialisierungsliste verwenden.
class Start { public: Start(); // kein Destruktor mehr notwendig private: ImgFile imgFile; }; Start::Start() : imgFile() // <- hier könnte man Argumente an den ImgFile-Konstruktor übergeben { // eigentlicher Konstruktorrumpf // keine Zuweisungen hier! }
-
Ok allerdings kommt das für mich irgendwie auf das gleiche raus ob ich nun ein Pointer auf das Objekt mache oder das Objekt direkt anspreche.
Meine eigentlich frage ist nicht auf das new bezogen sondern ob das generell Quark ist oder ob mein angehen jetzt in die richtige Richtung geht.
-
Ja, ist Quark.
Du brauchst überhaupt keinen Pointer und kannst einfach mit . auf die Member zugreifen.
Ein Pointer ist hier absolut überflüssig.
-
Nathan schrieb:
Ja, ist Quark.
Du brauchst überhaupt keinen Pointer und kannst einfach mit . auf die Member zugreifen.
Ein Pointer ist hier absolut überflüssig.Es geht gar nicht um den Pointer mehr! Das hab ich ja schon jetzt grade oft genug verstanden. Danke.
-
Schreib doch erstmal nen Loader für unkomprimierte TGA-Bilder.
Den Code kannst du praktisch zu 90% übernehmen und du hast nur minimal Zusatzarbeit gemacht, weißt aber wie die absoluten Basics von JPEG funktionieren.
-
@Enno:
Ach so, tschuldigung, habe dich falsch verstanden.
-
Ethon schrieb:
Schreib doch erstmal nen Loader für unkomprimierte TGA-Bilder.
Den Code kannst du praktisch zu 90% übernehmen und du hast nur minimal Zusatzarbeit gemacht, weißt aber wie die absoluten Basics von JPEG funktionieren.Hast du alles gelesen? Dann wüsstest du das ich das nicht machen will sondern gleich dabei bleibe.
Trotzdem danke für den Tipp ich weis das zu schätzen.Nathan schrieb:
@Enno:
Ach so, tschuldigung, habe dich falsch verstanden.Und die Anfänger müssen sich immer anhören das sie richtig lesen soll.

Ne ist ja kein Problem.
-
Enno schrieb:
Ethon schrieb:
Schreib doch erstmal nen Loader für unkomprimierte TGA-Bilder.
Den Code kannst du praktisch zu 90% übernehmen und du hast nur minimal Zusatzarbeit gemacht, weißt aber wie die absoluten Basics von JPEG funktionieren.Hast du alles gelesen? Dann wüsstest du das ich das nicht machen will sondern gleich dabei bleibe.
Trotzdem danke für den Tipp ich weis das zu schätzen.Das würde ich metaphorisch verpacken als "Ich baue kein Rad, sondern gleich ein Auto, das 4 Räder hat". Aber naja, dein Bier, viel Erfolg.

-
Danke
-
Hey Leute,
ich habe mich nun weiter durch gekämpft. Bin auch gut voran gekommen.
Meine Frage:
Muss man sich für verschiedene JPEG Bilder immer neue Quantisierungstabellen errechnen oder kann man dafür auch feste(also const) Tabellen nehmen?Ich meine sowas:
//luminocity quantanization table static const int lqt[64]{2, 1, 1, 2, 3, 5, 6, 7, 1, 1, 2, 2, 3, 7, 7, 7, 2, 2, 2, 3, 5, 7, 8, 7, 2, 2, 3, 3, 6, 10, 10, 7, 2, 3, 4, 7, 8, 13, 12, 9, 3, 4, 7, 8, 10, 12, 14, 11, 6, 8, 9, 10, 12, 15, 14, 12, 9, 11, 11, 12, 13, 12, 12, 12}; //chromaticity quantanization table static const int cqt[64]{2, 2, 3, 6, 12, 12, 12, 12, 2, 3, 3, 8, 12, 12, 12, 12, 3, 3, 7, 12, 12, 12, 12, 12, 6, 8, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12};
-
...
-
Swordfish schrieb:
Die ganze Kacke steht doch eh in CCITT/ITU T.81!?
Geile Antwort.
Das steht auch alles in meinem Buch! Antwort auf meine Frage ist das trotzdem nicht.
-
...
-
Ich hab da mal rein geluschert udn auf meine spezielle Frage keine Antwort gefunden. Darfst mir gerne verraten wo das steht.
-
Enno schrieb:
Ich hab da mal rein geluschert
Dir wurde hier wieder und wieder gesagt, dass du dich mit deinem Projekt vollkommen übernimmst. Du hast wieder und wieder versichert, dass du dich unbedingt durchbeißen möchtest. Und jetzt bist du zu unkonzentriert/faul, die grundlegende Beschreibung des Formates gründlich durchzulesen?
Ich weiß wirklich nicht, wie man dir noch helfen soll...
-
...
-
Swordfish schrieb:
Enno schrieb:
Darfst mir gerne verraten wo das steht.
Das ist aber überaus gnädig von dir!
CCITT/ITU T.81, p. 15 schrieb:
[...] No default values for quantization tables are specified in this Specification; applications may specify values which customize picture quality for their particular image characteristics, display devices, and viewing conditions. [...]
// edit: Bevor du jetzt auf die Idee kommst zu Fragen, wo du die Quantization tables denn nun herzaubern sollst: Section B.2.4.1: Quantization table-specification syntax, ebendort.
Danke genau das wollte ich wissen.
Aber wie ich an die DQT komme weiß ich danke.
Geht bei FFDB los, nächsten 4 Zeichen geben die Länge, nächstes Zeichen die Genauigkeit der Werte, das nächste Zeichen die Tabellen Nr. und die dadrauf folgenden 64 Bytes sind dann im ZigZag die Tabelle. (wenn die Länge 67 ist
) 
-
...
-
Nein das war der Hammer der immer gegen meine Kopf geschlagen hat!!!

Aber so konnte mir das hier auch keiner sagen.
P.S.: Ich steck da jetzt voll drin muss das jetzt nur noch in Code umsetzten das wird auf jeden fall noch dauern.

-
So ich hab hier jetzt mal was geschrieben und würde einfach gerne mal hören ob ihr das so gut findet!
Das mit dem new hab ich so weil das in allen Projekten so drin ist. Da würde ich gerne nicht drüber diskutieren.
Ansonsten würde ich gerne wissen ob ihr versteht was ich da mache.DQT.h
#include <iostream> #include "marker.h" class DQT{ public: ZigZag(); ~ZigZag(); void getPointer(); void buildQT(const char* dqt, int dqtcount); private: Marker *marker; int quantTable[0][64]; };DQT.cpp
#include <iostream> #include <vector> #include "DQT.h" DQT::DQT(){ marker = new Marker(); //Aus der Klasse Marker bekomme ich die Pointer auf die stelle FFDB } DQT::~DQT(){ delete marker; } /* * function to get pointer to quantization table */ void DQT::getPointer(){ int dqtcount = marker->getDQTcount(); for(int i=0; i<=dqtcount; i++){ marker->setDQTcounter(i); const char* dqt = marker->getDQT(); if(!dqt) return; DQT::buildQT(dqt+5); } } /* * function to build quantisation table */ void DQT::buildQT(const char* dqt, int dqtcount){ bool up = true; char buf; int count = 0; for(int i=0; i<8; i++){ if(up){ for(int j=0; j<=i; j++){ buf = (char)dqt[8 * (i - j) + j]; quantTable[dqtcount][count++] = buf; } }else{ for(int j=i; j>=0; j--){ buf = (char)dqt[8 * (i - j) + j]; quantTable[dqtcount][count++] = buf; } } up = !up; } for(int i=7; i>=0; i--){ if(up){ for(int j=0; j<i; j++){ buf = (char)dqt[8 * (7 - j) + 8 - i + j]; quantTable[dqtcount][count++] = buf; } }else{ for(int j=0; j<i; j++){ buf = (char)dqt[8 * (8 - i + j) + 7 - j]; quantTable[dqtcount][count++] = buf; } } up=!up; } }