MuseScore/libmscore/imageStore.h
Dmitri Ovodok f42109180c Use the original image file in SVG output if this saves SVG file size
The issue appears if cover page contains jpeg image. Generating SVG led to encoding jpeg to png and oversizing in some cases.
2019-06-18 11:45:27 +02:00

81 lines
2.6 KiB
C++

//=============================================================================
// MuseScore
// Music Composition & Notation
//
// Copyright (C) 2002-2011 Werner Schweer
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2
// as published by the Free Software Foundation and appearing in
// the file LICENCE.GPL
//=============================================================================
#ifndef __IMAGE_CACHE_H__
#define __IMAGE_CACHE_H__
namespace Ms {
class Image;
class Score;
//---------------------------------------------------------
// ImageStoreItem
//---------------------------------------------------------
class ImageStoreItem {
QList<Image*> _references;
QString _path; // original location of image
QString _type; // image type (file extension)
QByteArray _buffer;
QByteArray _hash; // 16 byte md4 hash of _buffer
public:
ImageStoreItem(const QString& p);
void dereference(Image*);
void reference(Image*);
const QString& path() const { return _path; }
QByteArray& buffer() { return _buffer; }
const QByteArray& buffer() const { return _buffer; }
bool loaded() const { return !_buffer.isEmpty(); }
void setPath(const QString& val);
bool isUsed(Score*) const;
bool isUsed() const { return !_references.empty(); }
void load();
QString hashName() const;
const QByteArray& hash() const { return _hash; }
void set(const QByteArray& b, const QByteArray& h) { _buffer = b; _hash = h; }
};
//---------------------------------------------------------
// ImageStore
//---------------------------------------------------------
class ImageStore {
typedef std::vector<ImageStoreItem*> ItemList;
ItemList _items;
public:
ImageStore() = default;
ImageStore(const ImageStore&) = delete;
ImageStore& operator=(const ImageStore&) = delete;
~ImageStore();
ImageStoreItem* getImage(const QString& path) const;
ImageStoreItem* add(const QString& path, const QByteArray&);
void clearUnused();
typedef ItemList::iterator iterator;
typedef ItemList::const_iterator const_iterator;
iterator begin() { return _items.begin(); }
const_iterator begin() const { return _items.begin(); }
iterator end() { return _items.end(); }
const_iterator end() const { return _items.end(); }
};
extern ImageStore imageStore; // this is the global imageStore
} // namespace Ms
#endif