QImage DetailWindow::imageFromChromagram(const KeyFinder::Chromagram& ch){ // 64 colours (plus black at index 0) // don't draw individual pixels; draw blocks of chromaScaleV*chromaScaleH. Sharpens image. QImage img = QImage(ch.getHops()*chromaScaleH,ch.getBins()*chromaScaleV,QImage::Format_Indexed8); prefs.setImageColours(img,ui->chromaColourCombo->currentIndex()); // get max to normalise float max = 0; for(unsigned int h = 0; h < ch.getHops(); h++){ for(unsigned int b = 0; b < ch.getBins(); b++){ float mag = ch.getMagnitude(h,b); if(mag>max) max = mag; } } // set pixels for(unsigned int h = 0; h < ch.getHops(); h++){ for(unsigned int b = 0; b < ch.getBins(); b++){ int pixVal = ch.getMagnitude(h,b) / max * img.colorCount() - 1; if(pixVal<1) pixVal = 1; for(int x=0; x<chromaScaleH; x++) for(int y=0; y<chromaScaleV; y++) img.setPixel(h*chromaScaleH+x, (ch.getBins()-1-b)*chromaScaleV+y, pixVal); } } return img; }
TEST (ChromagramTest, ConstructorDefaultsWork) { KeyFinder::Chromagram c; ASSERT_EQ(0, c.getHops()); }