Esempio n. 1
0
void HeightfieldData::write(Bitstream& out, bool color) {
    QMutexLocker locker(&_encodedMutex);
    if (_encoded.isEmpty()) {
        QImage image;        
        if (color) {    
            int size = glm::sqrt(_contents.size() / (float)BYTES_PER_PIXEL);
            image = QImage((uchar*)_contents.data(), size, size, QImage::Format_RGB888);
        } else {
            int size = glm::sqrt((float)_contents.size());
            image = QImage(size, size, QImage::Format_RGB888);
            uchar* dest = image.bits();
            for (const char* src = _contents.constData(), *end = src + _contents.size(); src != end; src++) {
                *dest++ = *src;
                *dest++ = *src;
                *dest++ = *src;
            }
        }
        QBuffer buffer(&_encoded);
        buffer.open(QIODevice::WriteOnly);
        image.save(&buffer, "JPG");
    }
    out << _encoded.size();
    out.writeAligned(_encoded);
}