feat(合入平板代码需要和bug): 合入平板代码需要和bug,合入后可解决相关issue
|
@ -0,0 +1,142 @@
|
|||
import QtQuick 2.12
|
||||
import QtQuick.Controls 2.12
|
||||
import "./part"
|
||||
Rectangle {
|
||||
id: coverflow
|
||||
anchors.fill: parent
|
||||
property ListModel imagemodel
|
||||
property int itemCount: variables.imagelist.length >= 5? 5 : variables.imagelist.length != 0 ? variables.imagelist.length : 1
|
||||
property int itemMargin: 40 //item间距
|
||||
property int itemDistance: coverflow.width + itemMargin //item+间距
|
||||
color: "transparent"
|
||||
signal changeImageFromView(var path,var changeWay) //切图
|
||||
property int backItem: -1 //前一个item的index
|
||||
property bool stopMove: true //控制pathvie能否滑动
|
||||
property string moveWay: "default"
|
||||
|
||||
|
||||
PathView {
|
||||
anchors.fill: parent
|
||||
objectName: "pathWid"
|
||||
id: pathView
|
||||
model: imagemodel
|
||||
movementDirection: moveWay == "default"? PathView.Shortest : moveWay == "back" ? PathView.Negative : PathView.Positive
|
||||
flickDeceleration:1000//轻弹减速的速率
|
||||
snapMode: PathView.SnapOneItem
|
||||
interactive: !stopMove ? false : itemCount <= 1 || variables.navigatorState ? false : true
|
||||
delegate: Item {
|
||||
id: delegateItem
|
||||
width: coverflow.width
|
||||
height: coverflow.height
|
||||
clip: true
|
||||
//主要的图片区域
|
||||
MainImageArea {
|
||||
objectName: "imageItem"
|
||||
id: imageArea
|
||||
x: 0
|
||||
y: 0
|
||||
width: mainWindow.width
|
||||
height: mainWindow.height
|
||||
imageUrl: url
|
||||
imageType: type
|
||||
itemIndex: index
|
||||
}
|
||||
}
|
||||
path: variables.imagelist.length >= 5? coverFlowPath : variables.imagelist.length == 4 ? coverFlowPathFourth : variables.imagelist.length == 3 ? coverFlowPathThird :variables.imagelist.length >= 2 ? coverFlowPathSecond : coverFlowPathFirst
|
||||
pathItemCount: itemCount
|
||||
highlightRangeMode: PathView.StrictlyEnforceRange
|
||||
preferredHighlightBegin: 0.5
|
||||
preferredHighlightEnd: 0.5
|
||||
|
||||
onMovementEnded: {
|
||||
//切图
|
||||
if (variables.imagelist.length - 1 >= pathView.currentIndex) {
|
||||
if (backItem != pathView.currentIndex) {
|
||||
if (pathView.currentIndex - backItem > 0) {
|
||||
if (backItem == 0 && pathView.currentIndex == pathView.count - 1) {
|
||||
changeImageFromView(variables.imagelist[pathView.currentIndex],false)
|
||||
} else {
|
||||
changeImageFromView(variables.imagelist[pathView.currentIndex],true)
|
||||
}
|
||||
} else if (pathView.currentIndex - backItem < 0) {
|
||||
if (pathView.currentIndex == 0 && backItem == pathView.count - 1) {
|
||||
changeImageFromView(variables.imagelist[pathView.currentIndex],true)
|
||||
} else {
|
||||
changeImageFromView(variables.imagelist[pathView.currentIndex],false)
|
||||
}
|
||||
}
|
||||
backItem = pathView.currentIndex
|
||||
}
|
||||
} else {
|
||||
console.log("切换图片失败,当前view和图片列表不匹配")
|
||||
}
|
||||
//将动图的显示进行重置-用以规避动图的显示过程可以被看到的问题
|
||||
for (var i = 0; i < pathView.count; i++) {
|
||||
if (i !== pathView.currentIndex) {
|
||||
if (variables.imageListEveryAddType[i]) {
|
||||
if (model.get(i).url !== "qrc:/res/res/loadgif.gif") {
|
||||
model.setProperty(i,"url","qrc:/res/res/loadgif.gif")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
backItem = pathView.currentIndex
|
||||
}
|
||||
}
|
||||
//item的行进路线-pathLine
|
||||
Path {
|
||||
id:coverFlowPath
|
||||
startX: -2*itemDistance - itemMargin / 2
|
||||
startY: coverflow.height / 2
|
||||
PathLine {x:-itemDistance - itemMargin / 2; y:coverflow.height / 2 }
|
||||
PathLine {x:-itemMargin / 2; y:coverflow.height / 2 }
|
||||
PathLine {x:-itemMargin / 2 + itemDistance; y:coverflow.height / 2 }
|
||||
PathLine {x:-itemMargin / 2 + 2 * itemDistance; y:coverflow.height / 2 }
|
||||
PathLine {x:-itemMargin / 2 + 3 * itemDistance; y:coverflow.height / 2 }
|
||||
}
|
||||
|
||||
Path{
|
||||
id: coverFlowPathFourth
|
||||
startX: -itemDistance / 2 - itemMargin / 2 - itemDistance
|
||||
startY: coverflow.height / 2
|
||||
PathLine { x: -itemDistance / 2 - itemMargin / 2 +itemDistance- itemDistance ; y:coverflow.height / 2 }
|
||||
PathLine { x: -itemDistance / 2 - itemMargin / 2 + 2*itemDistance- itemDistance ; y:coverflow.height / 2 }
|
||||
PathLine { x: -itemDistance / 2 - itemMargin / 2 + 3*itemDistance- itemDistance; y:coverflow.height / 2 }
|
||||
PathLine { x: -itemDistance / 2 - itemMargin / 2 + 4*itemDistance- itemDistance ; y:coverflow.height / 2 }
|
||||
}
|
||||
|
||||
Path{
|
||||
id: coverFlowPathThird
|
||||
startX: -itemDistance - itemMargin / 2
|
||||
startY: coverflow.height / 2
|
||||
PathLine { x: -itemMargin / 2; y:coverflow.height / 2 }
|
||||
PathLine { x: -itemMargin / 2 + itemDistance; y:coverflow.height / 2 }
|
||||
PathLine { x: -itemMargin / 2 + 2 * itemDistance; y:coverflow.height / 2 }
|
||||
|
||||
}
|
||||
Path{
|
||||
id: coverFlowPathSecond
|
||||
startX: -itemDistance / 2 - itemMargin / 2
|
||||
startY: coverflow.height / 2
|
||||
PathLine { x: -itemDistance / 2 - itemMargin / 2 +itemDistance ; y:coverflow.height / 2 }
|
||||
PathLine { x: -itemDistance / 2 - itemMargin / 2 + 2*itemDistance; y:coverflow.height / 2 }
|
||||
}
|
||||
Path{
|
||||
id: coverFlowPathFirst
|
||||
startX: 0
|
||||
startY: coverflow.height/2
|
||||
PathLine { x: coverflow.width; y:coverflow.height / 2 }
|
||||
}
|
||||
//通知pathview更换图片
|
||||
function noticeChangeIndex(changeIndex) {
|
||||
if (pathView.currentIndex === changeIndex) {
|
||||
return
|
||||
}
|
||||
pathView.currentIndex = changeIndex
|
||||
backItem = pathView.currentIndex
|
||||
}
|
||||
|
||||
}
|
|
@ -82,7 +82,13 @@ Mat KylinImageCodec::FI2MAT(FIBITMAP *src)
|
|||
}
|
||||
flip(dst, dst, 0);
|
||||
} else {
|
||||
FIBITMAP *palletized = FreeImage_ConvertTo8Bits(src);
|
||||
FIBITMAP *palletized;
|
||||
//标准位图且位图深度为1的图片
|
||||
if (bpp == 1 && fit == FIT_BITMAP) {
|
||||
palletized = FreeImage_ConvertToGreyscale(src);
|
||||
} else {
|
||||
palletized = FreeImage_ConvertTo8Bits(src);
|
||||
}
|
||||
dst = FI2MAT(palletized);
|
||||
}
|
||||
|
||||
|
|
|
@ -2,17 +2,21 @@
|
|||
|
||||
MatResult KylinImageCodec::loadImageToMat(QString path)
|
||||
{
|
||||
return loadThumbnailToMat(path, IMREAD_UNCHANGED, QSize(0, 0));
|
||||
return loadThumbnailToMat(path, "", IMREAD_UNCHANGED, QSize(0, 0));
|
||||
}
|
||||
|
||||
MatResult KylinImageCodec::loadThumbnailToMat(QString path, ImreadModes modes, QSize size)
|
||||
MatResult KylinImageCodec::loadThumbnailToMat(QString path, QString realFormat, ImreadModes modes, QSize size)
|
||||
{
|
||||
MatResult mr;
|
||||
//获取文件信息
|
||||
QString suffix;
|
||||
QFileInfo info(path);
|
||||
if ("" == realFormat) {
|
||||
suffix = info.suffix().toLower();
|
||||
} else {
|
||||
suffix = realFormat;
|
||||
}
|
||||
// svg、gif等opencv不支持的格式
|
||||
QString suffix = info.suffix().toLower();
|
||||
if (suffix == "gif" || suffix == "apng" || suffix == "png") {
|
||||
if ((suffix == "gif" || suffix == "apng" || suffix == "png")) {
|
||||
mr = loadMovieToMat(path, modes, suffix);
|
||||
} else if (suffix == "tif" || suffix == "tiff") {
|
||||
FREE_IMAGE_FORMAT fif = FIF_TIFF;
|
||||
|
@ -90,7 +94,7 @@ MatResult KylinImageCodec::loadImageToMat(QString path, ImreadModes modes, QStri
|
|||
mat = Mat(image.height(), image.width(), CV_8UC3, const_cast<uchar *>(image.bits()),
|
||||
static_cast<size_t>(image.bytesPerLine()))
|
||||
.clone();
|
||||
} else if (m_freeimageSupportFormats.contains(suffix)) {
|
||||
} else {
|
||||
mat = loadFreeimageFormat(path.toLocal8Bit().data());
|
||||
}
|
||||
// 1通道的bmp图片且freeimage库加载失败,opencv读取时会闪退在库中,所以直接返回显示为无法读取的图。
|
||||
|
@ -99,6 +103,8 @@ MatResult KylinImageCodec::loadImageToMat(QString path, ImreadModes modes, QStri
|
|||
if (!mat.data) {
|
||||
mr.mat = mat;
|
||||
return mr;
|
||||
} else {
|
||||
mat = imread(path.toLocal8Bit().data(), IMREAD_COLOR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -271,7 +277,11 @@ FREE_IMAGE_FORMAT KylinImageCodec::get_real_format(const QString &path)
|
|||
FREE_IMAGE_FORMAT format = FreeImage_GetFileType(temp_path.data());
|
||||
|
||||
/* 修复后缀 , 以库解析出来的为准 */
|
||||
if (format != FIF_UNKNOWN && format != m_formats[file_suffix_upper]) {
|
||||
int formatCode;
|
||||
if (m_formats.contains(file_suffix_upper)) {
|
||||
formatCode = m_formats.value(file_suffix_upper);
|
||||
}
|
||||
if (format != FIF_UNKNOWN && format != formatCode) {
|
||||
file_suffix_upper = m_formats.key(format);
|
||||
}
|
||||
if (format == FIF_TIFF) {
|
||||
|
@ -374,7 +384,8 @@ FREE_IMAGE_FORMAT KylinImageCodec::get_real_format(const QString &path)
|
|||
}
|
||||
|
||||
/* 根据后缀获取对应的格式 */
|
||||
format = static_cast<FREE_IMAGE_FORMAT>(m_formats[file_suffix_upper]);
|
||||
int formatCode1 = m_formats.value(file_suffix_upper);
|
||||
format = static_cast<FREE_IMAGE_FORMAT>(formatCode1);
|
||||
|
||||
|
||||
return format >= 0 ? format : FIF_UNKNOWN;
|
||||
|
|
|
@ -2,14 +2,15 @@
|
|||
|
||||
QStringList *KylinImageCodec::m_list = new QStringList;
|
||||
QString KylinImageCodec::m_savePath = "";
|
||||
bool KylinImageCodec::saveImage(const Mat &mat, const QString &savepath, bool replace)
|
||||
bool KylinImageCodec::saveImage(const Mat &mat, const QString &savepath, const QString &realFormat, bool replace)
|
||||
{
|
||||
return save(mat, saveWay(savepath, replace), QFileInfo(savepath).suffix());
|
||||
return save(mat, saveWay(savepath, replace), realFormat);
|
||||
}
|
||||
|
||||
bool KylinImageCodec::saveImage(QList<Mat> *list, const int &fps, const QString &savepath, bool replace)
|
||||
bool KylinImageCodec::saveImage(QList<Mat> *list, const int &fps, const QString &savepath, const QString &realFormat,
|
||||
bool replace)
|
||||
{
|
||||
return save(list, fps, saveWay(savepath, replace));
|
||||
return save(list, fps, saveWay(savepath, replace), realFormat);
|
||||
}
|
||||
|
||||
QString KylinImageCodec::saveWay(const QString &savepath, bool replace)
|
||||
|
@ -54,9 +55,9 @@ bool KylinImageCodec::save(const Mat &mat, const QString &savepath, const QStrin
|
|||
}
|
||||
return stbi_write_tga(savepath.toLocal8Bit().data(), tmpMat.cols, tmpMat.rows, 4, tmpMat.data);
|
||||
}
|
||||
if (type == "ico" || type == "xpm") {
|
||||
if (type == "ico" || type == "xpm" || type == "xbm") {
|
||||
QPixmap pix = converFormat(mat);
|
||||
return pix.save(savepath);
|
||||
return pix.save(savepath, type.toLocal8Bit());
|
||||
}
|
||||
// if(type == "hdr"){
|
||||
// Mat tmpMat;
|
||||
|
@ -72,43 +73,61 @@ bool KylinImageCodec::save(const Mat &mat, const QString &savepath, const QStrin
|
|||
if (type == "gif") {
|
||||
QList<Mat> *list = new QList<Mat>;
|
||||
list->append(mat);
|
||||
return save(list, 0, savepath);
|
||||
return save(list, 0, savepath, type);
|
||||
}
|
||||
if (type == "pbm") {
|
||||
QPixmap pix = converFormat(mat);
|
||||
return pix.save(savepath);
|
||||
return pix.save(savepath, type.toLocal8Bit());
|
||||
}
|
||||
if (type == "ppm") {
|
||||
QPixmap pix = converFormat(mat);
|
||||
return pix.save(savepath);
|
||||
return pix.save(savepath, type.toLocal8Bit());
|
||||
}
|
||||
//如果是freeimage库的图片
|
||||
if (m_freeimageSupportFormats.contains(type)) {
|
||||
if (m_freeimageSupportFormats.contains(type) && !g_needSaveAs) {
|
||||
if (type == "xpm" || type == "xbm" || type == "wbmp" || type == "webp") {
|
||||
QPixmap pix = converFormat(mat);
|
||||
return pix.save(savepath);
|
||||
return pix.save(savepath, type.toLocal8Bit());
|
||||
}
|
||||
FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
|
||||
fif = get_real_format(QString(savepath));
|
||||
if (fif == FIF_UNKNOWN) {
|
||||
fif = get_real_format(QString(savepath) + "." + type);
|
||||
}
|
||||
return saveFreeImage(savepath, mat, fif);
|
||||
}
|
||||
|
||||
//非特殊情况
|
||||
return imwrite(savepath.toStdString(), mat);
|
||||
QFileInfo fileInfo(savepath);
|
||||
if (m_supportFormats.contains(fileInfo.suffix().toLower())) {
|
||||
if (g_needSaveAs) {
|
||||
g_needSaveAs = false;
|
||||
return imwrite(savepath.toStdString(), mat);
|
||||
}
|
||||
if (type == fileInfo.suffix().toLower()) {
|
||||
return imwrite(savepath.toStdString(), mat);
|
||||
} else if (type == "ras" && fileInfo.suffix().toLower() == "sr") {
|
||||
return imwrite(savepath.toStdString(), mat);
|
||||
} else {
|
||||
qDebug() << "保存失败";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
qDebug() << "不支持该图片的保存";
|
||||
return false;
|
||||
}
|
||||
|
||||
bool KylinImageCodec::save(QList<Mat> *list, const int &fps, const QString &savepath)
|
||||
bool KylinImageCodec::save(QList<Mat> *list, const int &fps, const QString &savepath, const QString &realFormat)
|
||||
{
|
||||
if (list->length() < 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return saveMovie(list, fps, savepath);
|
||||
return saveMovie(list, fps, savepath, realFormat);
|
||||
}
|
||||
|
||||
bool KylinImageCodec::saveMovie(QList<Mat> *list, const int &fps, const QString &savepath)
|
||||
bool KylinImageCodec::saveMovie(QList<Mat> *list, const int &fps, const QString &savepath, const QString &realFormat)
|
||||
{
|
||||
SaveMovie *saveMovie = new SaveMovie(list, fps, savepath, m_list);
|
||||
SaveMovie *saveMovie = new SaveMovie(list, fps, savepath, realFormat, m_list);
|
||||
connect(saveMovie, &SaveMovie::saveMovieFinish, getSignalObj(), &KylinImageCodecSignals::saveMovieFinish);
|
||||
saveMovie->start();
|
||||
// Gif_H m_Gif;
|
||||
|
|
|
@ -3,13 +3,15 @@
|
|||
//临时文件路径
|
||||
const QString SaveMovie::TEMP_PATH = SaveMovie::creatTempPath();
|
||||
|
||||
SaveMovie::SaveMovie(QList<Mat> *list, const int &fps, const QString &savepath, QStringList *savelist)
|
||||
SaveMovie::SaveMovie(QList<Mat> *list, const int &fps, const QString &savepath, const QString &realFormat,
|
||||
QStringList *savelist)
|
||||
{
|
||||
//结束回收资源
|
||||
connect(this, &SaveMovie::finished, this, &SaveMovie::deleteLater);
|
||||
m_fps = fps;
|
||||
m_savepath = savepath;
|
||||
m_savelist = savelist;
|
||||
m_realFormat = realFormat;
|
||||
m_list = new QList<Mat>;
|
||||
for (Mat &mat : *list) {
|
||||
m_list->append(mat.clone());
|
||||
|
@ -36,7 +38,13 @@ void SaveMovie::run()
|
|||
QFileInfo info(m_savepath);
|
||||
QString name = info.completeBaseName();
|
||||
QString tmpName = info.completeBaseName() + "_tmp";
|
||||
QString suffix = info.suffix().toLower();
|
||||
|
||||
QString suffix;
|
||||
if ("" == m_realFormat) {
|
||||
suffix = info.suffix().toLower();
|
||||
} else {
|
||||
suffix = m_realFormat;
|
||||
}
|
||||
QString tmpDir = TEMP_PATH + name + "/";
|
||||
QString ster = "\"";
|
||||
//新建目录
|
||||
|
|
|
@ -9,12 +9,13 @@ KylinImageCodecSignals *KylinImageCodec::getSignalObj()
|
|||
}
|
||||
return m_signalObj;
|
||||
}
|
||||
|
||||
bool KylinImageCodec::g_needSaveAs = false;
|
||||
const QStringList KylinImageCodec::m_opencvSupportFormats =
|
||||
{ //"exr","EXR",有问题,opencv只支持其查看,不支持写入。此格式支持设置为壁纸
|
||||
"jpg", "jpe", "jpeg", "pbm", "pgm", "ppm", "sr", "ras", "png"};
|
||||
"sr", "ras"};
|
||||
const QStringList KylinImageCodec::m_freeimageSupportFormats = { // 10种可读取可保存的格式
|
||||
"exr", "psd", "jfi", "jif", "jp2", "j2k", "jng", "wbmp", "xbm", "pnm", "tiff", "tif", "webp", "bmp", "dib"};
|
||||
"exr", "psd", "jfi", "jif", "jp2", "j2k", "jng", "wbmp", "xbm", "pnm", "tiff",
|
||||
"tif", "webp", "bmp", "dib", "png", "jpg", "jpe", "jpeg", "pbm", "pgm", "ppm"};
|
||||
const QStringList KylinImageCodec::m_otherSupportFormats = {"tga", "svg", "gif", "apng", "ico", "xpm"};
|
||||
const QString KylinImageCodec::m_supportFrmatsClassify = "(*.jpg *.jpe *.jpeg);;"
|
||||
"(*.pnm *.pbm);;"
|
||||
|
@ -32,7 +33,36 @@ const QStringList KylinImageCodec::m_supportFormats = KylinImageCodec::m_opencvS
|
|||
+ KylinImageCodec::m_freeimageSupportFormats
|
||||
+ KylinImageCodec::m_otherSupportFormats;
|
||||
|
||||
|
||||
const QStringList KylinImageCodec::m_supportFormatsMT = {"image/vnd.microsoft.icon",
|
||||
"image/x-jp2-codestream",
|
||||
"image/vnd.adobe.photoshop",
|
||||
"image/webp",
|
||||
"image/svg+xml",
|
||||
"image/x-jng",
|
||||
"image/jp2",
|
||||
"image/gif",
|
||||
"image/vnd.wap.wbmp",
|
||||
"image/x-xbitmap",
|
||||
"image/x-xpixmap",
|
||||
"image/x-exr",
|
||||
"image/x-portable-graymap",
|
||||
"image/x-portable-anymap",
|
||||
"image/x-portable-pixmap",
|
||||
"image/x-cmu-raster",
|
||||
"image/x-portable-bitmap",
|
||||
"image/x-tga",
|
||||
"image/x-sun-raster",
|
||||
"image/bmp",
|
||||
"image/jpeg",
|
||||
"image/tiff",
|
||||
"image/png"};
|
||||
QHash<QString, int> KylinImageCodec::m_formats = KylinImageCodec::creatFormats();
|
||||
QStringList KylinImageCodec::g_allFormat = {
|
||||
"BMP", "ICO", "JPG", "JPE", "JPS", "JPEG", "KOALA", "KOA", "LBM", "IFF", "MNG", "PBM",
|
||||
"PBMRAW", "PCD", "PCX", "PGM", "PGMRAW", "PNG", "PPM", "PPMRAW", "RAS", "TGA", "TARGA", "TIFF",
|
||||
"TIF", "PCT", "PIC", "PICT", "WEBP", "JXR", "PFM", "DDS", "GIF", "HDR", "FAX", "G3",
|
||||
"SGI", "CUT", "JNG", "WBMP", "PSD", "XBM", "XPM", "EXR", "JP2", "J2K"};
|
||||
QHash<QString, int> KylinImageCodec::creatFormats()
|
||||
{
|
||||
QHash<QString, int> tmpFormats;
|
||||
|
@ -84,7 +114,18 @@ QHash<QString, int> KylinImageCodec::creatFormats()
|
|||
tmpFormats.insert("J2K", FIF_J2K);
|
||||
return tmpFormats;
|
||||
}
|
||||
|
||||
QStringList KylinImageCodec::g_jpegList = {"jpg", "jpe", "jps", "jpeg", "jif", "jfi"};
|
||||
QStringList KylinImageCodec::g_bmpList = {"bmp", "dib"};
|
||||
QStringList KylinImageCodec::g_koaList = {"koa", "koala"};
|
||||
QStringList KylinImageCodec::g_lbmList = {"lbm", "iff"};
|
||||
QStringList KylinImageCodec::g_tgaList = {"tga", "targa"};
|
||||
QStringList KylinImageCodec::g_tiffList = {"tiff", "tif"};
|
||||
QStringList KylinImageCodec::g_pictList = {"pct", "pic", "pict"};
|
||||
QStringList KylinImageCodec::g_faxList = {"fax", "g3"};
|
||||
QStringList KylinImageCodec::g_pngList = {"png", "apng"};
|
||||
QStringList KylinImageCodec::g_otherFormatList = {"sr", "ras", "exr", "psd", "jp2", "j2k", "jng", "wbmp",
|
||||
"xbm", "pnm", "webp", "svg", "gif", "ico", "xpm"};
|
||||
QStringList KylinImageCodec::g_pbmList = {"pbm", "pgm", "ppm"};
|
||||
QStringList KylinImageCodec::getSupportFormats()
|
||||
{
|
||||
return m_supportFormats;
|
||||
|
|
|
@ -34,17 +34,34 @@ class KYLINIMAGECODEC_EXPORT KylinImageCodec : public KylinImageCodecSignals
|
|||
public:
|
||||
static KylinImageCodecSignals *getSignalObj();
|
||||
static MatResult loadImageToMat(QString path);
|
||||
static MatResult loadThumbnailToMat(QString path, ImreadModes modes = IMREAD_REDUCED_COLOR_8,
|
||||
QSize size = QSize(94, 56));
|
||||
static MatResult loadThumbnailToMat(QString path, QString realFormat = "",
|
||||
ImreadModes modes = IMREAD_REDUCED_COLOR_8, QSize size = QSize(94, 56));
|
||||
static QStringList getSupportFormats();
|
||||
static QString getOpenFileFormats();
|
||||
static QPixmap converFormat(const Mat &mat);
|
||||
|
||||
static bool saveImage(const Mat &mat, const QString &savepath, bool replace = true);
|
||||
static bool saveImage(QList<Mat> *list, const int &fps, const QString &savepath, bool replace = true);
|
||||
static bool saveImage(const Mat &mat, const QString &savepath, const QString &realFormat, bool replace = true);
|
||||
static bool saveImage(QList<Mat> *list, const int &fps, const QString &savepath, const QString &realFormat,
|
||||
bool replace = true);
|
||||
static bool isSaving(const QString &path);
|
||||
static bool allSaveFinish();
|
||||
static QString savePath();
|
||||
//获取文件格式
|
||||
static FREE_IMAGE_FORMAT get_real_format(const QString &path);
|
||||
static QHash<QString, int> m_formats;
|
||||
static QStringList g_jpegList;
|
||||
static QStringList g_bmpList;
|
||||
static QStringList g_koaList;
|
||||
static QStringList g_lbmList;
|
||||
static QStringList g_tgaList;
|
||||
static QStringList g_tiffList;
|
||||
static QStringList g_pictList;
|
||||
static QStringList g_faxList;
|
||||
static QStringList g_pngList;
|
||||
static QStringList g_pbmList;
|
||||
static QStringList g_allFormat;
|
||||
static QStringList g_otherFormatList;
|
||||
static bool g_needSaveAs;
|
||||
|
||||
private:
|
||||
static MatResult loadImageToMat(QString path, ImreadModes modes, QString suffix, QSize size);
|
||||
|
@ -52,17 +69,16 @@ private:
|
|||
static int getDelay(const QString &path, const QString &suffix);
|
||||
static int gifDelay(const QString &path);
|
||||
static Mat loadFreeimageFormat(const char *filename); // freeimage库加载图片
|
||||
static FREE_IMAGE_FORMAT get_real_format(const QString &path);
|
||||
static Mat FI2MAT(FIBITMAP *src); //转mat
|
||||
static Mat FI2MAT(FIBITMAP *src); //转mat
|
||||
static QString saveWay(const QString &savepath, bool replace);
|
||||
static bool save(const Mat &mat, const QString &savepath, const QString &type);
|
||||
static bool save(QList<Mat> *list, const int &fps, const QString &savepath);
|
||||
static bool saveMovie(QList<Mat> *list, const int &fps, const QString &savepath);
|
||||
static bool save(QList<Mat> *list, const int &fps, const QString &savepath, const QString &realFormat);
|
||||
static bool saveMovie(QList<Mat> *list, const int &fps, const QString &savepath, const QString &realFormat);
|
||||
static bool saveFreeImage(const QString &path, Mat mat, FREE_IMAGE_FORMAT); //保存freeimage格式图片
|
||||
static bool mat2fibitmap(Mat mat, FREE_IMAGE_FORMAT, QString);
|
||||
static fipImage mat2RgbFipImage(Mat mat); //转为
|
||||
static QHash<QString, int> creatFormats();
|
||||
static QHash<QString, int> m_formats;
|
||||
|
||||
static KylinImageCodecSignals *m_signalObj;
|
||||
static QStringList *m_list; //用来保存正在保存的动图队列
|
||||
static const QStringList m_supportFormats; // opencv支持的格式列表
|
||||
|
@ -71,6 +87,9 @@ private:
|
|||
static const QStringList m_freeimageSupportFormats; // libfreeimage支持的格式列表
|
||||
static const QStringList m_otherSupportFormats; //其他支持格式列表
|
||||
static QString m_savePath; //图片保存路径
|
||||
|
||||
// mime-type
|
||||
static const QStringList m_supportFormatsMT; // opencv支持的格式列表
|
||||
};
|
||||
|
||||
#endif // KYLIN_IMAGE_CODEC_H
|
||||
|
|
|
@ -19,7 +19,8 @@ Q_SIGNALS:
|
|||
void saveMovieFinish(const QString &path);
|
||||
|
||||
public:
|
||||
SaveMovie(QList<Mat> *list, const int &fps, const QString &savepath, QStringList *savelist = nullptr);
|
||||
SaveMovie(QList<Mat> *list, const int &fps, const QString &savepath, const QString &realFormat,
|
||||
QStringList *savelist = nullptr);
|
||||
|
||||
protected:
|
||||
void run();
|
||||
|
@ -35,6 +36,7 @@ private:
|
|||
void processLog();
|
||||
static const QString TEMP_PATH; //临时文件路径
|
||||
static const QString creatTempPath(); //创建临时目录
|
||||
QString m_realFormat = "";
|
||||
};
|
||||
|
||||
#endif // SAVEMOVIE_H
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include <libkyocr.hpp>
|
||||
|
||||
#include "kylinocr.h"
|
||||
#include <QDebug>
|
||||
|
||||
KylinOCR::KylinOCR() {}
|
||||
|
||||
void KylinOCR::getText(QString imgPath)
|
||||
|
|
|
@ -14,4 +14,4 @@ Exec=/usr/bin/kylin-photo-viewer %u
|
|||
Icon=kylin-photo-viewer
|
||||
Type=Application
|
||||
Categories=Graphics;
|
||||
MimeType=application/ico;application/x-navi-animation;audio/x-riff;image/bmp;image/gif;image/ico;image/icon;image/jpeg;image/jpg;image/jpx;image/pjpeg;image/png;image/qtif;image/svg;image/svg+xml;image/svg+xml-compressed;image/svg-xml;image/tiff;image/vnd.adobe.svg+xml;image/vnd.microsoft.icon;image/vnd.wap.wbmp;image/webp;image/x-MS-bmp;image/x-adobe-dng;image/x-bmp;image/x-canon-cr2;image/x-canon-crw;image/x-compressed-xcf;image/x-epson-erf;image/x-fuji-raf;image/x-gray;image/x-icb;image/x-icns;image/x-ico;image/x-icon;image/x-minolta-mrw;image/x-nikon-nef;image/x-olympus-orf;image/x-pcx;image/x-pentax-pef;image/x-png;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-quicktime;image/x-sony-arw;image/x-tga;image/x-win-bitmap;image/x-wmf;image/x-xbitmap;image/x-xcf;image/x-xpixmap;text/ico;text/xml-svg;image/x-sun-raster;image/x-cmu-raster;
|
||||
MimeType=application/ico;application/x-navi-animation;audio/x-riff;image/bmp;image/gif;image/ico;image/icon;image/jpeg;image/jpg;image/jpx;image/pjpeg;image/png;image/qtif;image/svg;image/svg+xml;image/svg+xml-compressed;image/svg-xml;image/tiff;image/vnd.adobe.svg+xml;image/vnd.microsoft.icon;image/vnd.wap.wbmp;image/webp;image/x-MS-bmp;image/x-adobe-dng;image/x-bmp;image/x-canon-cr2;image/x-canon-crw;image/x-compressed-xcf;image/x-epson-erf;image/x-fuji-raf;image/x-gray;image/x-icb;image/x-icns;image/x-ico;image/x-icon;image/x-minolta-mrw;image/x-nikon-nef;image/x-olympus-orf;image/x-pcx;image/x-pentax-pef;image/x-png;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-quicktime;image/x-sony-arw;image/x-tga;image/x-win-bitmap;image/x-wmf;image/x-xbitmap;image/x-xcf;image/x-xpixmap;text/ico;text/xml-svg;image/x-sun-raster;image/x-cmu-raster;image/jp2;image/x-exr;image/x-psd;
|
||||
|
|
|
@ -4,6 +4,11 @@
|
|||
<default>""</default>
|
||||
<summary>imagePath</summary>
|
||||
<description>imagePath</description>
|
||||
</key>
|
||||
<key name="sidebar-state" type="i">
|
||||
<default>0</default>
|
||||
<summary>sidebarState</summary>
|
||||
<description>sidebarState</description>
|
||||
</key>
|
||||
<key name="log-level" type="s">
|
||||
<default>"critical"</default>
|
||||
|
|
|
@ -1,3 +1,14 @@
|
|||
kylin-photo-viewer (1.3.0.3-ok10) yangtze; urgency=medium
|
||||
|
||||
* BUG号:# issues/I64UTA 【看图】【需求15193】无法复制图片
|
||||
#issues/I5XDFE 【次要】【看图】【平板模式】单击图片打开后,图片未居中显示
|
||||
# issues/I64UQT 双击窗口内位置无法最大化
|
||||
* 需求号:无
|
||||
* 其他改动说明:合入平板平板需要 19807,以及合入通用bug的解决方案
|
||||
* 影响域:合入平板平板需要 19807,bug和issue修复
|
||||
|
||||
-- zoujunnan <zoujunnan@kylinos.cn> Tue, 03 Jan 2023 18:43:28 +0800
|
||||
|
||||
kylin-photo-viewer (1.3.0.3-ok9build2) yangtze; urgency=medium
|
||||
|
||||
* BUG号:# issue I64UTA【看图】【需求15193】无法复制图片
|
||||
|
|
|
@ -33,27 +33,36 @@ function checkComboForShortcut(combo, wheelDelta) {
|
|||
function whatToDoWithFoundShortcut(sh, wheelDelta) {
|
||||
|
||||
var cmd = sh[1]
|
||||
|
||||
var obj
|
||||
for(var i=0; i<coverFLow.children.length; i++){
|
||||
if(coverFLow.children[i] instanceof PathView){
|
||||
for (var j = 0; j <coverFLow.children[i].currentItem.children.length;j++ ) {
|
||||
if (coverFLow.children[i].currentItem.children[j] instanceof Item) {
|
||||
obj =coverFLow.children[i].currentItem.children[j]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(cmd === "__zoomIn") {
|
||||
imageArea.zoomIn(wheelDelta)
|
||||
obj.zoomIn(wheelDelta)
|
||||
} else if (cmd === "__zoomOut") {
|
||||
imageArea.zoomOut(wheelDelta)
|
||||
obj.zoomOut(wheelDelta)
|
||||
} else if(cmd === "__zoomReset") {
|
||||
imageArea.zoomReset()
|
||||
obj.zoomReset()
|
||||
} else if(cmd === "__zoomActual") {
|
||||
imageArea.zoomActual()
|
||||
obj.zoomActual()
|
||||
} else if(cmd === "__rotateL") {
|
||||
imageArea.rotate(-variables.angle90)
|
||||
obj.rotate(-variables.angle90)
|
||||
} else if(cmd === "__rotateR") {
|
||||
imageArea.rotate(variables.angle90)
|
||||
obj.rotate(variables.angle90)
|
||||
} else if(cmd === "__rotate0") {
|
||||
imageArea.rotateReset()
|
||||
obj.rotateReset()
|
||||
} else if(cmd === "__flipH") {
|
||||
imageArea.mirrorH()
|
||||
obj.mirrorH()
|
||||
} else if(cmd === "__flipV") {
|
||||
imageArea.mirrorV()
|
||||
obj.mirrorV()
|
||||
} else if(cmd === "__flipReset") {
|
||||
imageArea.mirrorReset()
|
||||
obj.mirrorReset()
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -27,16 +27,15 @@ import "./MouseAreaBase.js" as MouseAreaBase
|
|||
Item {
|
||||
anchors.fill: parent
|
||||
MouseArea {
|
||||
|
||||
anchors.fill: parent
|
||||
acceptedButtons: Qt.LeftButton|Qt.RightButton|Qt.MiddleButton
|
||||
hoverEnabled: true
|
||||
|
||||
cursorShape: Qt.ArrowCursor
|
||||
|
||||
property int angleDeltaX: 0
|
||||
property int angleDeltaY: 0
|
||||
|
||||
|
||||
onWheel: {
|
||||
|
||||
var combo = ""
|
||||
|
@ -44,6 +43,7 @@ Item {
|
|||
angleDeltaX += wheel.angleDelta.x
|
||||
angleDeltaY += wheel.angleDelta.y
|
||||
|
||||
variables.wheelVaule = Qt.point(angleDeltaX, angleDeltaY)
|
||||
MouseAreaBase.checkComboForShortcut(combo, Qt.point(angleDeltaX, angleDeltaY))
|
||||
|
||||
angleDeltaX = 0
|
||||
|
@ -52,7 +52,7 @@ Item {
|
|||
variables.wheelChange = !variables.wheelChange
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -46,13 +46,15 @@ Item {
|
|||
property int mouseDragType: -1
|
||||
property bool startAni: true
|
||||
signal buriedPoint()
|
||||
property bool aniStop: false
|
||||
|
||||
AnimatedImage {
|
||||
id: theImage
|
||||
objectName: "image"
|
||||
property real curX: imageNormal.width/2 - width/2
|
||||
property real curY: imageNormal.height/2 - height/2
|
||||
property real realCurX
|
||||
property real realCurY
|
||||
property int index: parent.parent.parent.itemIndex
|
||||
x: curX
|
||||
y: curY
|
||||
focus: true
|
||||
|
@ -61,7 +63,7 @@ Item {
|
|||
clip: true
|
||||
cache: false
|
||||
asynchronous: true
|
||||
source: "qrc:/res/res/kyview_logo.png"
|
||||
source: parent.parent.parent.imageUrl
|
||||
mirror: false
|
||||
//图像在缩放或变换时是否平滑过滤。平滑过滤可以提供更好的视觉质量
|
||||
smooth: (width * scale > variables.curWidW || height > variables.curWidH)
|
||||
|
@ -70,9 +72,15 @@ Item {
|
|||
rotation: 0
|
||||
property real rotateTo: 0
|
||||
onRotateToChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
rotation = rotateTo
|
||||
}
|
||||
onRotationChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
if(!rotani.running) {
|
||||
rotateTo = rotation
|
||||
}
|
||||
|
@ -84,7 +92,7 @@ Item {
|
|||
Behavior on x {
|
||||
PropertyAnimation {
|
||||
id: xani
|
||||
duration: startAni ? variables.imageAniDuration : 0
|
||||
duration: variables.startAni ? variables.imageAniDuration : 0
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
|
@ -92,14 +100,14 @@ Item {
|
|||
Behavior on y {
|
||||
PropertyAnimation {
|
||||
id: yani
|
||||
duration: startAni ? variables.imageAniDuration : 0
|
||||
duration: variables.startAni ? variables.imageAniDuration : 0
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
Behavior on rotation {
|
||||
PropertyAnimation {
|
||||
id: rotani
|
||||
duration: startAni ? variables.imageAniDuration : 0
|
||||
duration: variables.startAni ? variables.imageAniDuration : 0
|
||||
onRunningChanged: {
|
||||
if (!rotani.running) {
|
||||
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
|
||||
|
@ -111,23 +119,26 @@ Item {
|
|||
Behavior on scale {
|
||||
PropertyAnimation {
|
||||
id: scaleani
|
||||
duration: startAni ? variables.imageAniDuration : 0
|
||||
duration: variables.startAni ? variables.imageAniDuration : 0
|
||||
onRunningChanged: {
|
||||
if (!scaleani.running) {
|
||||
aniStop = true
|
||||
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
|
||||
imageBase.makeSureNavigatorNeedShow(theImage)
|
||||
} else {
|
||||
aniStop = false
|
||||
}
|
||||
}
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
onXChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
setDrogLimit()
|
||||
}
|
||||
onYChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
setDrogLimit()
|
||||
}
|
||||
|
||||
|
@ -136,6 +147,9 @@ Item {
|
|||
}
|
||||
|
||||
function changeScale(scaleValue) {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
imageBase.setImageScaleWithImageUpdate(theImage,scaleValue)
|
||||
}
|
||||
|
||||
|
@ -145,49 +159,71 @@ Item {
|
|||
|
||||
//重设位置
|
||||
function imagePostionReset() {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
imageBase.resetImagePostion(theImage)
|
||||
}
|
||||
|
||||
onStatusChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
if (theImage.status == Image.Ready) {
|
||||
theImage.source = imageNormal.imagePath
|
||||
// theImage.source = imageNormal.imagePath
|
||||
if (newImageLoaded) {
|
||||
theImage.imagePostionReset()
|
||||
}
|
||||
}
|
||||
}
|
||||
onSourceChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
variables.startAni = false
|
||||
theImage.imagePostionReset()
|
||||
variables.startAni = true
|
||||
}
|
||||
|
||||
function setSource(imagePath) {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
imageNormal.imagePath = imagePath
|
||||
theImage.source = imageNormal.imagePath
|
||||
}
|
||||
function changeImage(imageUrl,imageWidth,imageHeight) {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
|
||||
if (variables.operateImageWay === 12) {
|
||||
theImage.source = ""
|
||||
startAni = false
|
||||
variables.startAni = false
|
||||
theImage.x = variables.curWidW / 2 - imageWidth / 2
|
||||
theImage.y = variables.curWidH / 2 - imageHeight / 2
|
||||
imageNormal.imagePath = imageUrl
|
||||
theImage.source = imageNormal.imagePath
|
||||
startAni = true
|
||||
variables.startAni = true
|
||||
}
|
||||
if (variables.operateImageWay === 17) {
|
||||
theImage.source = ""
|
||||
startAni = false
|
||||
variables.startAni = false
|
||||
theImage.x = variables.curWidW / 2 - imageWidth / 2 + imageWidth + 10
|
||||
theImage.y = variables.curWidH / 2 - imageHeight / 2
|
||||
imageNormal.imagePath = imageUrl
|
||||
theImage.source = imageNormal.imagePath
|
||||
startAni = true
|
||||
variables.startAni = true
|
||||
theImage.x = variables.curWidW / 2 - imageWidth / 2
|
||||
}
|
||||
if (variables.operateImageWay === 18) {
|
||||
theImage.source = ""
|
||||
startAni = false
|
||||
variables.startAni = false
|
||||
theImage.x = - imageWidth - 10
|
||||
theImage.y = variables.curWidH / 2 - imageHeight / 2
|
||||
imageNormal.imagePath = imageUrl
|
||||
theImage.source = imageNormal.imagePath
|
||||
startAni = true
|
||||
variables.startAni = true
|
||||
theImage.x = variables.curWidW / 2 - imageWidth / 2
|
||||
}
|
||||
|
||||
|
@ -198,6 +234,12 @@ Item {
|
|||
onWheelChangeChanged: {
|
||||
buriedPoint()
|
||||
}
|
||||
//story 19807
|
||||
onNeedRestoreOrigChanged: {
|
||||
imageBase.imageRestore(theImage)
|
||||
|
||||
}
|
||||
//story 19807
|
||||
}
|
||||
|
||||
PinchArea {
|
||||
|
@ -214,24 +256,23 @@ Item {
|
|||
onPinchStarted: {
|
||||
initialScale = theImage.curScale
|
||||
buriedPoint()
|
||||
|
||||
}
|
||||
|
||||
onPinchUpdated: {
|
||||
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
// 关闭动画
|
||||
startAni = false
|
||||
|
||||
variables.startAni = false
|
||||
variables.recordCurrentImageHasOperate = true
|
||||
if (!imageNeedCenterZoom) {
|
||||
imageBase.performZoom(theImage,theImage.mapFromItem(pincharea,pinch.center.x, pinch.center.y), undefined, false, false, true, (initialScale*pinch.scale)/theImage.curScale)
|
||||
} else {
|
||||
imageBase.performZoom(theImage,theImage.mapFromItem(pincharea, mainWindow.width/2, mainWindow.height/2), undefined, false, false, true,(initialScale*pinch.scale)/theImage.curScale)
|
||||
theImage.imagePostionReset()
|
||||
}
|
||||
|
||||
|
||||
// 开启动画
|
||||
startAni = true
|
||||
variables.startAni = true
|
||||
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
|
@ -245,26 +286,45 @@ Item {
|
|||
propagateComposedEvents:true //设置鼠标穿透,双击的事件需要传到底层
|
||||
|
||||
onPressAndHold: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
variables.mousePos = mousearea.mapToItem(bgimage, Qt.point(mouse.x, mouse.y))
|
||||
}
|
||||
|
||||
onReleased: {
|
||||
|
||||
theImage.curX = theImage.x
|
||||
theImage.curY = theImage.y
|
||||
theImage.x = Qt.binding(function() { return theImage.curX })
|
||||
theImage.y = Qt.binding(function() { return theImage.curY })
|
||||
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
if (variables.doubleRestore) {
|
||||
variables.doubleRestore = false
|
||||
return
|
||||
} else {
|
||||
theImage.curX = theImage.x
|
||||
theImage.curY = theImage.y
|
||||
theImage.x = Qt.binding(function() { return theImage.curX })
|
||||
theImage.y = Qt.binding(function() { return theImage.curY })
|
||||
}
|
||||
imageBase.controlImageInWid(theImage)
|
||||
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
|
||||
imageBase.makeSureNavigatorNeedShow(theImage)
|
||||
|
||||
|
||||
if (variables.imageIsDrag) {
|
||||
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
|
||||
variables.imageIsDrag = false
|
||||
}
|
||||
}
|
||||
onPositionChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
variables.imageIsDrag = true
|
||||
variables.recordCurrentImageHasOperate = true
|
||||
setDrogLimit()
|
||||
imageBase.imageActuralLeftUpPos(theImage,theImage.x,theImage.y)
|
||||
imageBase.makeSureNavigatorNeedShow(theImage)
|
||||
if (!variables.historyScale) {
|
||||
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -294,14 +354,18 @@ Item {
|
|||
if (needWheelReact == false) {
|
||||
return
|
||||
}
|
||||
variables.recordCurrentImageHasOperate = true
|
||||
|
||||
if (wheelDelta != undefined && !imageNeedCenterZoom) {
|
||||
imageBase.performZoom(theImage,theImage.mapFromItem(bgimage, variables.mousePos.x, variables.mousePos.y), undefined, true, false, false)
|
||||
} else {
|
||||
imageBase.performZoom(theImage,theImage.mapFromItem(bgimage, mainWindow.width/2, mainWindow.height/2), undefined, true, false, false)
|
||||
theImage.imagePostionReset()
|
||||
}
|
||||
variables.operateImageWay = 1
|
||||
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
|
||||
imageBase.makeSureNavigatorNeedShow(theImage)
|
||||
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
|
||||
}
|
||||
|
||||
onZoomOut: {
|
||||
|
@ -312,14 +376,17 @@ Item {
|
|||
if (needWheelReact == false) {
|
||||
return
|
||||
}
|
||||
variables.recordCurrentImageHasOperate = true
|
||||
if (wheelDelta != undefined && !imageNeedCenterZoom) {
|
||||
imageBase.performZoom(theImage,theImage.mapFromItem(bgimage, variables.mousePos.x, variables.mousePos.y), undefined, false, false, false)
|
||||
} else {
|
||||
imageBase.performZoom(theImage,theImage.mapFromItem(bgimage, mainWindow.width/2, mainWindow.height/2), undefined, false, false, false)
|
||||
theImage.imagePostionReset()
|
||||
}
|
||||
variables.operateImageWay = 2
|
||||
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
|
||||
imageBase.makeSureNavigatorNeedShow(theImage)
|
||||
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
|
||||
}
|
||||
onRotate: {
|
||||
if (isMoiveRunning()) {
|
||||
|
@ -335,11 +402,11 @@ Item {
|
|||
}
|
||||
var old = theImage.mirror
|
||||
theImage.mirror = !old
|
||||
startAni = false
|
||||
variables.startAni = false
|
||||
if (theImage.rotateTo / variables.angle90 % 2 != 0) {
|
||||
theImage.rotateTo += variables.angle180
|
||||
}
|
||||
startAni = true
|
||||
variables.startAni = true
|
||||
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
|
||||
}
|
||||
onMirrorV: {
|
||||
|
@ -348,16 +415,19 @@ Item {
|
|||
}
|
||||
var old = theImage.mirror
|
||||
theImage.mirror = !old
|
||||
startAni = false
|
||||
variables.startAni = false
|
||||
if (theImage.rotateTo / variables.angle90 % 2 == 0) {
|
||||
theImage.rotateTo += variables.angle180
|
||||
}
|
||||
startAni = true
|
||||
variables.startAni = true
|
||||
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
|
||||
}
|
||||
}
|
||||
|
||||
function setCurScale(zoomfactor) {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
var curScale = theImage.curScale * zoomfactor
|
||||
|
||||
if (curScale > 100 ) {
|
||||
|
@ -370,7 +440,7 @@ Item {
|
|||
}
|
||||
|
||||
function operateImage(operateWay) {
|
||||
if (container.imageType === 0) {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
variables.operateImageWay = operateWay
|
||||
|
@ -381,18 +451,34 @@ Item {
|
|||
//缩小
|
||||
container.zoomOut(undefined)
|
||||
} else if (operateWay === 3) {
|
||||
variables.recordCurrentImageHasOperate = false
|
||||
variables.historyScale = 0
|
||||
variables.historyX = 0
|
||||
variables.historyY = 0
|
||||
//逆时针旋转
|
||||
container.rotate(-variables.angle90)
|
||||
theImage.imagePostionReset()
|
||||
} else if (operateWay === 4) {
|
||||
variables.recordCurrentImageHasOperate = false
|
||||
variables.historyScale = 0
|
||||
variables.historyX = 0
|
||||
variables.historyY = 0
|
||||
//顺时针旋转
|
||||
container.rotate(variables.angle90)
|
||||
theImage.imagePostionReset()
|
||||
} else if (operateWay === 5) {
|
||||
variables.recordCurrentImageHasOperate = false
|
||||
variables.historyScale = 0
|
||||
variables.historyX = 0
|
||||
variables.historyY = 0
|
||||
//水平
|
||||
container.mirrorH()
|
||||
theImage.imagePostionReset()
|
||||
} else if (operateWay === 6) {
|
||||
variables.recordCurrentImageHasOperate = false
|
||||
variables.historyScale = 0
|
||||
variables.historyX = 0
|
||||
variables.historyY = 0
|
||||
//垂直
|
||||
container.mirrorV()
|
||||
theImage.imagePostionReset()
|
||||
|
@ -410,12 +496,22 @@ Item {
|
|||
}
|
||||
//切图
|
||||
if (operateWay === 12 || operateWay === 17 || operateWay === 18) {
|
||||
variables.recordCurrentImageHasOperate = false
|
||||
variables.historyScale = 0
|
||||
variables.historyX = 0
|
||||
variables.historyY = 0
|
||||
// newImageLoaded = true
|
||||
// variables.startAni = false
|
||||
// theImage.imagePostionReset()
|
||||
// variables.startAni = true
|
||||
|
||||
newImageLoaded = true
|
||||
startAni = false
|
||||
variables.startAni = false
|
||||
theImage.rotateTo = 0
|
||||
startAni = true
|
||||
theImage.mirror = false
|
||||
theImage.imagePostionReset()
|
||||
variables.startAni = true
|
||||
|
||||
} else {
|
||||
newImageLoaded = false
|
||||
}
|
||||
|
@ -427,10 +523,11 @@ Item {
|
|||
}
|
||||
//判断当前的图片加载模式,防止影响其他信号的接收
|
||||
function isMoiveRunning() {
|
||||
if (container.imageType === 0) {
|
||||
return true
|
||||
} else {
|
||||
var currentImagePath = "file://" + variables.currentPath
|
||||
if ((currentImagePath === theImage.source.toString() || theImage.source.toString() === "qrc:/res/res/loadgif.gif") && variables.currentImageIndex == theImage.index) {
|
||||
return false
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -510,16 +607,25 @@ Item {
|
|||
}
|
||||
if(!variables.navigatorState) {
|
||||
mousearea.enabled = false
|
||||
mousearea.drag.axis = Drag.None
|
||||
} else {
|
||||
mousearea.enabled = true
|
||||
}
|
||||
}
|
||||
function adjustImagePostion() {
|
||||
function adjustImagePostion(needRecord) {
|
||||
setDrogLimit()
|
||||
imageBase.controlImageInWid(theImage)
|
||||
if (needRecord === true) {
|
||||
variables.recordCurrentImageHasOperate = true
|
||||
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
|
||||
}
|
||||
}
|
||||
function updatePosAccordingToWidSizeChange() {
|
||||
function updatePosAccordingToWidSizeChange(needRecord) {
|
||||
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
|
||||
imageBase.makeSureNavigatorNeedShow(theImage)
|
||||
if (needRecord === true) {
|
||||
variables.recordCurrentImageHasOperate = true
|
||||
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,6 +23,13 @@
|
|||
import QtQuick 2.12
|
||||
|
||||
Item {
|
||||
function recordCUrrentPOsAndScaleInfo(imageObj) {
|
||||
|
||||
variables.historyScale = imageObj.curScale
|
||||
variables.historyX = imageObj.curX
|
||||
variables.historyY = imageObj.curY
|
||||
}
|
||||
|
||||
//重置图片位置-居中
|
||||
function resetImagePostion(imageObj) {
|
||||
|
||||
|
@ -30,11 +37,96 @@ Item {
|
|||
imageObj.curY = imageObj.parent.height/2 - imageObj.height/2
|
||||
imageObj.x = Qt.binding(function() { return imageObj.curX })
|
||||
imageObj.y = Qt.binding(function() { return imageObj.curY })
|
||||
|
||||
if (variables.operateImageWay === 7 || variables.operateImageWay === 0
|
||||
|| variables.operateImageWay === 11 || variables.operateImageWay === 12
|
||||
|| variables.operateImageWay === 17 || variables.operateImageWay === 18) {
|
||||
variables.origX = imageObj.curX
|
||||
variables.origY = imageObj.curY
|
||||
}
|
||||
}
|
||||
//首次打开; 同一张图片: 退出ocr,退出裁剪,适应窗口,原图展示,ocr;切图 更新缩放比
|
||||
function setImageScaleWithImageUpdate(imageObj,scaleValue) {
|
||||
imageObj.curScale = scaleValue
|
||||
if (variables.operateImageWay === 7 || variables.operateImageWay === 0
|
||||
|| variables.operateImageWay === 11 || variables.operateImageWay === 12
|
||||
|| variables.operateImageWay === 17 || variables.operateImageWay === 18) {
|
||||
variables.origScale = scaleValue
|
||||
}
|
||||
}
|
||||
//story 19807
|
||||
//还原自适应
|
||||
function imageRestore(imageObj) {
|
||||
var currentImagePath = "image://main/" + variables.currentPath
|
||||
if (variables.imageListEveryAddType[variables.currentImageIndex]) {
|
||||
currentImagePath = "file://" + variables.currentPath
|
||||
}
|
||||
if (currentImagePath !== imageObj.source.toString()) {
|
||||
return
|
||||
}
|
||||
variables.doubleRestore = true
|
||||
if (variables.operateImageWay === 7 || variables.operateImageWay === 0
|
||||
|| variables.operateImageWay === 11 || variables.operateImageWay === 12
|
||||
|| variables.operateImageWay === 17 || variables.operateImageWay === 18
|
||||
|| variables.operateImageWay === 3|| variables.operateImageWay === 4
|
||||
|| variables.operateImageWay === 5|| variables.operateImageWay === 6) {
|
||||
if ((!variables.recordCurrentImageHasOperate && variables.historyScale == 0) || variables.origScale == variables.historyScale) {
|
||||
if (imageObj.curScale === variables.origScale) {
|
||||
imageObj.curScale *= 2
|
||||
imageObj.realCurX = mainWindow.width/2 - imageObj.width*imageObj.scale/2
|
||||
imageObj.realCurY = mainWindow.height/2 - imageObj.height*imageObj.scale/2
|
||||
resetImagePostion(imageObj)
|
||||
|
||||
imageActuralLeftUpPos(imageObj,imageObj.curX,imageObj.curY)
|
||||
makeSureNavigatorNeedShow(imageObj)
|
||||
imageObj.parent.sendScale(imageObj.curScale * 100)
|
||||
} else {
|
||||
variables.recordCurrentImageHasOperate = false
|
||||
variables.restoreOrigToToolbar = !variables.restoreOrigToToolbar
|
||||
makeSureNavigatorNeedShow(imageObj)
|
||||
}
|
||||
|
||||
} else {
|
||||
if (imageObj.curScale === variables.origScale) {
|
||||
if (!variables.historyScale) {
|
||||
imageObj.curScale *= 2
|
||||
imageObj.realCurX = mainWindow.width/2 - imageObj.width*imageObj.scale/2
|
||||
imageObj.realCurY = mainWindow.height/2 - imageObj.height*imageObj.scale/2
|
||||
resetImagePostion(imageObj)
|
||||
imageActuralLeftUpPos(imageObj,imageObj.curX,imageObj.curY)
|
||||
makeSureNavigatorNeedShow(imageObj)
|
||||
imageObj.parent.sendScale(imageObj.curScale * 100)
|
||||
} else {
|
||||
variables.restoreToHistory = true
|
||||
imageObj.curX = variables.historyX
|
||||
imageObj.curY = variables.historyY
|
||||
imageObj.curScale = variables.historyScale
|
||||
imageActuralLeftUpPos(imageObj,imageObj.curX,imageObj.curY)
|
||||
makeSureNavigatorNeedShow(imageObj)
|
||||
variables.restoreToHistory = false
|
||||
variables.recordCurrentImageHasOperate = false
|
||||
imageObj.parent.sendScale(imageObj.curScale * 100)
|
||||
|
||||
}
|
||||
} else {
|
||||
variables.recordCurrentImageHasOperate = false
|
||||
variables.restoreOrigToToolbar = !variables.restoreOrigToToolbar
|
||||
makeSureNavigatorNeedShow(imageObj)
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
if (variables.recordCurrentImageHasOperate) {
|
||||
variables.recordCurrentImageHasOperate = false
|
||||
//发送适应窗口的信号给c++前端
|
||||
variables.restoreOrigToToolbar = !variables.restoreOrigToToolbar
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//story 19807
|
||||
|
||||
|
||||
//返回图片的缩放比
|
||||
function getImageScale(imageObj) {
|
||||
return imageObj.curScale * variables.scalingconstant
|
||||
|
@ -43,6 +135,10 @@ Item {
|
|||
//处理缩放等事件
|
||||
function performZoom(theImage, pos, wheelDelta, zoom_in, zoom_actual, zoom_pinch, zoom_pinchfactor) {
|
||||
|
||||
if (variables.restoreToHistory) {
|
||||
pos = variables.histortPos
|
||||
}
|
||||
|
||||
if (wheelDelta !== undefined) {
|
||||
if (wheelDelta.y > 12) {
|
||||
wheelDelta.y = 12
|
||||
|
@ -87,6 +183,10 @@ Item {
|
|||
zoomfactor = 0.05 / theImage.curScale
|
||||
}
|
||||
}
|
||||
if (variables.controlImageDoubleScale == true) {
|
||||
zoomfactor = 2 / theImage.curScale
|
||||
}
|
||||
|
||||
// update x/y position of image
|
||||
var realX = (pos.x - theImage.width/2) * theImage.curScale
|
||||
var realY = (pos.y - theImage.height/2) * theImage.curScale
|
||||
|
@ -132,20 +232,19 @@ Item {
|
|||
|
||||
var actualY
|
||||
var actualX
|
||||
|
||||
if (theImageCurY >= 0) {
|
||||
actualY = theImageCurY + theImage.height / 2 - (theImage.height * theImage.scale) / 2
|
||||
actualY = theImageCurY + theImage.height / 2 - (theImage.height * theImage.curScale) / 2
|
||||
} else {
|
||||
actualY = theImage.height / 2 - Math.abs(theImageCurY) - theImage.height / 2 * theImage.scale
|
||||
actualY = theImage.height / 2 - Math.abs(theImageCurY) - theImage.height / 2 * theImage.curScale
|
||||
}
|
||||
if (theImageCurX >= 0) {
|
||||
actualX = theImageCurX + theImage.width / 2 - (theImage.width * theImage.scale) / 2
|
||||
actualX = theImageCurX + theImage.width / 2 - (theImage.width * theImage.curScale) / 2
|
||||
} else {
|
||||
actualX = theImage.width / 2 - Math.abs(theImageCurX) - theImage.width / 2 * theImage.scale
|
||||
actualX = theImage.width / 2 - Math.abs(theImageCurX) - theImage.width / 2 * theImage.curScale
|
||||
}
|
||||
if(Math.abs(theImage.rotateTo % variables.angle360) == variables.angle90 || Math.abs(theImage.rotateTo % variables.angle360) == variables.angle270) {
|
||||
actualX = actualX + theImage.width * theImage.scale / 2 - theImage.height * theImage.scale / 2
|
||||
actualY = actualY + theImage.height * theImage.scale / 2 - theImage.width * theImage.scale /2
|
||||
actualX = actualX + theImage.width * theImage.curScale / 2 - theImage.height * theImage.curScale / 2
|
||||
actualY = actualY + theImage.height * theImage.curScale / 2 - theImage.width * theImage.curScale /2
|
||||
}
|
||||
theImage.parent.imageLeftUpX = actualX
|
||||
theImage.parent.imageLeftUpY = actualY
|
||||
|
|
|
@ -63,8 +63,6 @@ Item {
|
|||
property double realHeight : 0
|
||||
property rect paintblurRect
|
||||
signal buriedPoint()
|
||||
property bool aniStop: false
|
||||
|
||||
|
||||
Image {
|
||||
objectName: "image"
|
||||
|
@ -73,6 +71,7 @@ Item {
|
|||
property real curY: imageNormal.height/2 - height/2
|
||||
property real realCurX
|
||||
property real realCurY
|
||||
property int index: parent.parent.parent.itemIndex
|
||||
|
||||
x: curX
|
||||
y: curY
|
||||
|
@ -89,16 +88,22 @@ Item {
|
|||
smooth: (width * scale > variables.curWidW || height > variables.curWidH)
|
||||
//保存图像在缩放或变换时是否使用mipmap过滤。与平滑相比,缩小比例时,mipmap过滤提供了更好的视觉质量,但它可能会以性能为代价(无论是在初始化图像时还是在渲染期间)。
|
||||
mipmap: (scale < defaultScale || (scale < 0.8 && defaultScale < 0.8)) && (width > variables.curWidW || height > variables.curWidH)
|
||||
source: "qrc:/res/res/kyview_logo.png"
|
||||
source: parent.parent.parent.imageUrl
|
||||
|
||||
//旋转--参数:real,角度。默认0 degree
|
||||
rotation: 0
|
||||
property real rotateTo: 0
|
||||
|
||||
onRotateToChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
rotation = rotateTo
|
||||
}
|
||||
onRotationChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
if(!rotani.running) {
|
||||
rotateTo = rotation
|
||||
}
|
||||
|
@ -106,26 +111,26 @@ Item {
|
|||
property real curScale: 1
|
||||
scale: curScale
|
||||
|
||||
|
||||
Behavior on x {
|
||||
PropertyAnimation {
|
||||
id: xani
|
||||
duration: startAni ? variables.imageAniDuration : 0
|
||||
duration: variables.startAni ? variables.imageAniDuration : 0
|
||||
easing.type: Easing.OutCubic
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on y {
|
||||
PropertyAnimation {
|
||||
id: yani
|
||||
duration: startAni ? variables.imageAniDuration : 0
|
||||
duration: variables.startAni ? variables.imageAniDuration : 0
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
Behavior on rotation {
|
||||
PropertyAnimation {
|
||||
id: rotani
|
||||
duration: startAni ? variables.imageAniDuration : 0
|
||||
duration: variables.startAni ? variables.imageAniDuration : 0
|
||||
onRunningChanged: {
|
||||
if (!rotani.running) {
|
||||
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
|
||||
|
@ -137,27 +142,33 @@ Item {
|
|||
Behavior on scale {
|
||||
PropertyAnimation {
|
||||
id: scaleani
|
||||
duration: startAni ? variables.imageAniDuration : 0
|
||||
duration: variables.startAni ? variables.imageAniDuration : 0
|
||||
onRunningChanged: {
|
||||
if (!scaleani.running) {
|
||||
aniStop = true
|
||||
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
|
||||
imageBase.makeSureNavigatorNeedShow(theImage)
|
||||
} else {
|
||||
aniStop = false
|
||||
}
|
||||
}
|
||||
easing.type: Easing.OutCubic
|
||||
}
|
||||
}
|
||||
onXChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
setDrogLimit()
|
||||
}
|
||||
onYChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
setDrogLimit()
|
||||
}
|
||||
|
||||
function changeScale(scaleValue) {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
imageBase.setImageScaleWithImageUpdate(theImage,scaleValue)
|
||||
}
|
||||
|
||||
|
@ -167,12 +178,22 @@ Item {
|
|||
|
||||
//重设位置
|
||||
function imagePostionReset() {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
imageBase.resetImagePostion(theImage)
|
||||
}
|
||||
onStatusChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
if (theImage.status == Image.Ready) {
|
||||
if (newImageLoaded) {
|
||||
theImage.imagePostionReset()
|
||||
//解开tiff的动效
|
||||
if (variables.currentType == "multiTiff") {
|
||||
variables.startAni = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -180,23 +201,38 @@ Item {
|
|||
Connections {
|
||||
target: variables
|
||||
onPainterTypeChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
if (variables.painterType == -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
theImage.paintCanvas()
|
||||
}
|
||||
onPainterReleaseChanged:{
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
theImage.paintCanvas()
|
||||
}
|
||||
onCoreNeedPaintChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
theImage.paintCanvas()
|
||||
}
|
||||
onNeedExitPaintChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
exitSign()
|
||||
variables.signMouseStart = false
|
||||
}
|
||||
|
||||
onOperateImageWayChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
if (variables.operateImageWay == 0) {
|
||||
//放开拖拽和缩放
|
||||
pincharea.enabled = true
|
||||
|
@ -204,13 +240,27 @@ Item {
|
|||
needWheelReact = true
|
||||
}
|
||||
if (variables.operateImageWay == 15 || variables.operateImageWay == 9 || variables.operateImageWay == 10) {
|
||||
if (variables.operateImageWay == 15) {
|
||||
variables.signMouseStart = true
|
||||
}
|
||||
mousearea.enabled = true
|
||||
} /*else {
|
||||
area.enabled = false
|
||||
}*/
|
||||
}
|
||||
//story 19807
|
||||
onNeedRestoreOrigChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
imageBase.imageRestore(theImage)
|
||||
}
|
||||
//story 19807
|
||||
}
|
||||
function createTextObj(mx,my) {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
if (variables.painterType === 6) {
|
||||
var component61 = Qt.createComponent("qrc:/signcanvas/TextEditPage.qml");
|
||||
if (component61.status === Component.Ready) {
|
||||
|
@ -239,6 +289,9 @@ Item {
|
|||
}
|
||||
|
||||
function paintCanvas() {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
|
||||
if (variables.painterType == -1) {
|
||||
mousearea.enabled = true
|
||||
|
@ -330,48 +383,36 @@ Item {
|
|||
}
|
||||
}
|
||||
|
||||
function changeImage(imageUrl,imageWidth,imageHeight) {
|
||||
realWidth = imageWidth
|
||||
realHeight = imageHeight
|
||||
if (realWidth <= variables.curWidW && realHeight <= variables.curWidH) {
|
||||
imageLeftUpX = variables.curWidW / 2 - realWidth / 2
|
||||
imageLeftUpY = variables.curWidH / 2 - realHeight / 2
|
||||
backX = imageRealLeftX
|
||||
backY = imageRealLeftY
|
||||
function changeImage(imageUrl,imageWidth,imageHeight,tiffType,page,hasRotation) {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
|
||||
if (variables.operateImageWay === 12) {
|
||||
theImage.source = ""
|
||||
startAni = false
|
||||
theImage.x = variables.curWidW / 2 - imageWidth / 2
|
||||
theImage.y = variables.curWidH / 2 - imageHeight / 2
|
||||
theImage.source = imageUrl
|
||||
startAni = true
|
||||
if (imageUrl === "") {
|
||||
return
|
||||
}
|
||||
if (variables.operateImageWay === 17) {
|
||||
theImage.source = ""
|
||||
startAni = false
|
||||
theImage.x = variables.curWidW / 2 - imageWidth / 2 + imageWidth + 10
|
||||
theImage.y = variables.curWidH / 2 - imageHeight / 2
|
||||
theImage.source = imageUrl
|
||||
startAni = true
|
||||
theImage.x = variables.curWidW / 2 - imageWidth / 2
|
||||
}
|
||||
if (variables.operateImageWay === 18) {
|
||||
theImage.source = ""
|
||||
startAni = false
|
||||
theImage.x = - imageWidth - 10
|
||||
theImage.y = variables.curWidH / 2 - imageHeight / 2
|
||||
theImage.source = imageUrl
|
||||
startAni = true
|
||||
theImage.x = variables.curWidW / 2 - imageWidth / 2
|
||||
variables.startAni = false
|
||||
if (variables.operateImageWay === 12 || variables.operateImageWay === 17 || variables.operateImageWay === 18) {
|
||||
if (variables.currentType === "multiTiff") {
|
||||
theImage.source = ""
|
||||
newImageLoaded = true
|
||||
if (variables.imageHasChanged && page) {
|
||||
theImage.rotateTo = 0
|
||||
theImage.mirror = false
|
||||
}
|
||||
theImage.source = imageUrl
|
||||
theImage.imagePostionReset()
|
||||
}
|
||||
}
|
||||
variables.startAni = true
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Connections {
|
||||
target: variables
|
||||
onWheelChangeChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
buriedPoint()
|
||||
}
|
||||
}
|
||||
|
@ -386,13 +427,19 @@ Item {
|
|||
|
||||
property real initialScale
|
||||
onPinchStarted: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
initialScale = theImage.curScale
|
||||
buriedPoint()
|
||||
}
|
||||
onPinchUpdated: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
// 关闭动画
|
||||
startAni = false
|
||||
|
||||
variables.startAni = false
|
||||
variables.recordCurrentImageHasOperate = true
|
||||
if (!imageNeedCenterZoom) {
|
||||
imageBase.performZoom(theImage,theImage.mapFromItem(pincharea,pinch.center.x, pinch.center.y), undefined, false, false, true, (initialScale*pinch.scale)/theImage.curScale)
|
||||
} else {
|
||||
|
@ -402,7 +449,8 @@ Item {
|
|||
theImage.imagePostionReset()
|
||||
}
|
||||
// 开启动画
|
||||
startAni = true
|
||||
variables.startAni = true
|
||||
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
|
@ -413,23 +461,43 @@ Item {
|
|||
hoverEnabled: false // 必须设置为false,否则,鼠标的坐标抓取的就不是全局的
|
||||
propagateComposedEvents:true //设置鼠标穿透,双击的事件需要传到底层
|
||||
|
||||
onPressAndHold: {
|
||||
variables.mousePos = mousearea.mapToItem(bgimage, Qt.point(mouse.x, mouse.y))
|
||||
}
|
||||
onReleased: {
|
||||
theImage.curX = theImage.x
|
||||
theImage.curY = theImage.y
|
||||
theImage.x = Qt.binding(function() { return theImage.curX })
|
||||
theImage.y = Qt.binding(function() { return theImage.curY })
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
if (variables.doubleRestore) {
|
||||
variables.doubleRestore = false
|
||||
return
|
||||
} else {
|
||||
theImage.curX = theImage.x
|
||||
theImage.curY = theImage.y
|
||||
theImage.x = Qt.binding(function() { return theImage.curX })
|
||||
theImage.y = Qt.binding(function() { return theImage.curY })
|
||||
}
|
||||
imageBase.controlImageInWid(theImage)
|
||||
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
|
||||
imageBase.makeSureNavigatorNeedShow(theImage)
|
||||
if (variables.imageIsDrag) {
|
||||
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
|
||||
variables.imageIsDrag = false
|
||||
}
|
||||
}
|
||||
|
||||
onPositionChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
variables.imageIsDrag = true
|
||||
variables.recordCurrentImageHasOperate = true
|
||||
setDrogLimit()
|
||||
imageBase.imageActuralLeftUpPos(theImage,theImage.x ,theImage.y)
|
||||
imageBase.makeSureNavigatorNeedShow(theImage)
|
||||
|
||||
if (!variables.historyScale) {
|
||||
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: variables
|
||||
onMousePosChanged: {
|
||||
|
@ -456,6 +524,9 @@ Item {
|
|||
if (needWheelReact == false) {
|
||||
return
|
||||
}
|
||||
|
||||
variables.recordCurrentImageHasOperate = true
|
||||
|
||||
if (wheelDelta != undefined && !imageNeedCenterZoom) {
|
||||
imageBase.performZoom(theImage,theImage.mapFromItem(bgimage, variables.mousePos.x, variables.mousePos.y), undefined, true, false, false)
|
||||
} else {
|
||||
|
@ -464,8 +535,11 @@ Item {
|
|||
theImage.realCurY = mainWindow.height/2 - theImage.height*theImage.scale/2
|
||||
theImage.imagePostionReset()
|
||||
}
|
||||
variables.operateImageWay = 1
|
||||
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
|
||||
imageBase.makeSureNavigatorNeedShow(theImage)
|
||||
|
||||
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
|
||||
}
|
||||
|
||||
onZoomOut: {
|
||||
|
@ -476,6 +550,7 @@ Item {
|
|||
if (needWheelReact == false) {
|
||||
return
|
||||
}
|
||||
variables.recordCurrentImageHasOperate = true
|
||||
if (wheelDelta != undefined && !imageNeedCenterZoom) {
|
||||
imageBase.performZoom(theImage,theImage.mapFromItem(bgimage, variables.mousePos.x, variables.mousePos.y), undefined, false, false, false)
|
||||
} else {
|
||||
|
@ -484,8 +559,10 @@ Item {
|
|||
theImage.realCurY = mainWindow.height/2 - theImage.height*theImage.scale/2
|
||||
theImage.imagePostionReset()
|
||||
}
|
||||
variables.operateImageWay = 2
|
||||
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
|
||||
imageBase.makeSureNavigatorNeedShow(theImage)
|
||||
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
|
||||
}
|
||||
onRotate: {
|
||||
if (isMoiveRunning()) {
|
||||
|
@ -501,11 +578,11 @@ Item {
|
|||
}
|
||||
var old = theImage.mirror
|
||||
theImage.mirror = !old
|
||||
startAni = false
|
||||
variables.startAni = false
|
||||
if (theImage.rotateTo / variables.angle90 % 2 != 0) {
|
||||
theImage.rotateTo += variables.angle180
|
||||
}
|
||||
startAni = true
|
||||
variables.startAni = true
|
||||
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
|
||||
}
|
||||
onMirrorV: {
|
||||
|
@ -514,18 +591,64 @@ Item {
|
|||
}
|
||||
var old = theImage.mirror
|
||||
theImage.mirror = !old
|
||||
startAni = false
|
||||
variables.startAni = false
|
||||
if (theImage.rotateTo / variables.angle90 % 2 == 0) {
|
||||
theImage.rotateTo += variables.angle180
|
||||
}
|
||||
startAni = true
|
||||
variables.startAni = true
|
||||
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
|
||||
}
|
||||
}
|
||||
Connections {
|
||||
target: variables
|
||||
onOperateImageWayChanged: {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
if (variables.operateImageWay === 3) {
|
||||
// mouseareaEnabeled = false
|
||||
|
||||
variables.recordCurrentImageHasOperate = false
|
||||
variables.historyScale = 0
|
||||
variables.historyX = 0
|
||||
variables.historyY = 0
|
||||
//逆时针旋转
|
||||
container.rotate(-variables.angle90)
|
||||
theImage.imagePostionReset()
|
||||
} else if (variables.operateImageWay === 4) {
|
||||
// mouseareaEnabeled = false
|
||||
variables.recordCurrentImageHasOperate = false
|
||||
variables.historyScale = 0
|
||||
variables.historyX = 0
|
||||
variables.historyY = 0
|
||||
//顺时针旋转
|
||||
container.rotate(variables.angle90)
|
||||
theImage.imagePostionReset()
|
||||
} else if (variables.operateImageWay === 5) {
|
||||
// mouseareaEnabeled = false
|
||||
variables.recordCurrentImageHasOperate = false
|
||||
variables.historyScale = 0
|
||||
variables.historyX = 0
|
||||
variables.historyY = 0
|
||||
//水平
|
||||
container.mirrorH()
|
||||
theImage.imagePostionReset()
|
||||
} else if (variables.operateImageWay === 6) {
|
||||
// mouseareaEnabeled = false
|
||||
variables.recordCurrentImageHasOperate = false
|
||||
variables.historyScale = 0
|
||||
variables.historyX = 0
|
||||
variables.historyY = 0
|
||||
//垂直
|
||||
container.mirrorV()
|
||||
theImage.imagePostionReset()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function operateImage(operateWay) {
|
||||
|
||||
if (container.imageType === 1) {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
variables.operateImageWay = operateWay
|
||||
|
@ -535,7 +658,7 @@ Item {
|
|||
} else if (operateWay === 2) {
|
||||
//缩小
|
||||
container.zoomOut(undefined)
|
||||
} else if (operateWay === 3) {
|
||||
}/* else if (operateWay === 3) {
|
||||
//逆时针旋转
|
||||
container.rotate(-variables.angle90)
|
||||
theImage.imagePostionReset()
|
||||
|
@ -551,7 +674,7 @@ Item {
|
|||
//垂直
|
||||
container.mirrorV()
|
||||
theImage.imagePostionReset()
|
||||
}
|
||||
}*/
|
||||
//ocr和裁剪
|
||||
if (operateWay === 9 || operateWay === 10) {
|
||||
//禁止拖拽和缩放
|
||||
|
@ -566,12 +689,26 @@ Item {
|
|||
}
|
||||
//切图
|
||||
if (operateWay === 12 || operateWay === 17 || operateWay === 18) {
|
||||
startAni = false
|
||||
theImage.rotateTo = 0
|
||||
startAni = true
|
||||
theImage.mirror = false
|
||||
newImageLoaded = true
|
||||
theImage.imagePostionReset()
|
||||
variables.recordCurrentImageHasOperate = false
|
||||
variables.historyScale = 0
|
||||
variables.historyX = 0
|
||||
variables.historyY = 0
|
||||
if (variables.currentType == "normal") {
|
||||
variables.startAni = false
|
||||
newImageLoaded = true
|
||||
theImage.imagePostionReset()
|
||||
variables.startAni = true
|
||||
} else {
|
||||
variables.startAni = false
|
||||
newImageLoaded = true
|
||||
if (variables.imageHasChanged) {
|
||||
if (!theImage.rotateTo || !theImage.mirror) {
|
||||
theImage.rotateTo = 0
|
||||
theImage.mirror = false
|
||||
}
|
||||
}
|
||||
theImage.imagePostionReset()
|
||||
}
|
||||
} else {
|
||||
newImageLoaded = false
|
||||
}
|
||||
|
@ -583,11 +720,11 @@ Item {
|
|||
}
|
||||
//判断当前的图片加载模式,防止影响其他信号的接收
|
||||
function isMoiveRunning() {
|
||||
|
||||
if (container.imageType === 1) {
|
||||
return true
|
||||
} else {
|
||||
var currentImagePath = "image://main/" + variables.currentPath
|
||||
if ((currentImagePath === theImage.source.toString() || variables.currentType == "multiTiff") && theImage.index == variables.currentImageIndex) {
|
||||
return false
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
}
|
||||
//返回所需要相对于窗口的X和Y
|
||||
|
@ -619,11 +756,16 @@ Item {
|
|||
}
|
||||
|
||||
function operateNavigatorChangeImagePos(leftUpPoint) {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
imageBase.operateNavigatorChangeImagePos(leftUpPoint,theImage)
|
||||
}
|
||||
|
||||
function setDrogLimit() {
|
||||
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
if(Math.abs(theImage.rotateTo % variables.angle360) == variables.angle90 || Math.abs(theImage.rotateTo % variables.angle360) == variables.angle270) {
|
||||
if (theImage.width * theImage.scale >= variables.curWidH) {
|
||||
if (theImage.height * theImage.scale >= variables.curWidW) {
|
||||
|
@ -664,21 +806,40 @@ Item {
|
|||
}
|
||||
}
|
||||
if(!variables.navigatorState) {
|
||||
mousearea.drag.axis= Drag.None
|
||||
mousearea.enabled = false
|
||||
} else {
|
||||
mousearea.enabled = true
|
||||
}
|
||||
}
|
||||
function adjustImagePostion() {
|
||||
function adjustImagePostion(needRecord) {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
setDrogLimit()
|
||||
imageBase.controlImageInWid(theImage)
|
||||
if (needRecord) {
|
||||
variables.recordCurrentImageHasOperate = true
|
||||
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
|
||||
}
|
||||
}
|
||||
function updatePosAccordingToWidSizeChange() {
|
||||
function updatePosAccordingToWidSizeChange(needRecord) {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
|
||||
imageBase.makeSureNavigatorNeedShow(theImage)
|
||||
if (needRecord) {
|
||||
variables.recordCurrentImageHasOperate = true
|
||||
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function undoSignOperate() {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
if (variables.objList.length == 0) {
|
||||
variables.coreNeedPaint = !variables.coreNeedPaint
|
||||
return
|
||||
|
@ -703,6 +864,9 @@ Item {
|
|||
|
||||
}
|
||||
function exitSign() {
|
||||
if (isMoiveRunning()) {
|
||||
return
|
||||
}
|
||||
if (variables.objList.length == 0) {
|
||||
return
|
||||
}
|
||||
|
|
|
@ -35,6 +35,7 @@ Item {
|
|||
anchors.rightMargin: 0
|
||||
|
||||
property int imageType: 0 //判断动静图,需要加载哪一个qml
|
||||
property int itemIndex: 0
|
||||
|
||||
signal zoomIn(var wheelDelta)
|
||||
signal zoomOut(var wheelDelta)
|
||||
|
@ -45,7 +46,25 @@ Item {
|
|||
signal mirrorH()
|
||||
signal mirrorV()
|
||||
signal mirrorReset()
|
||||
property string imageUrl:imageType == 0? "qrc:/res/res/kyview_logo.png" : "qrc:/res/res/loadgif.gif"
|
||||
|
||||
MouseArea {
|
||||
id: transMouse
|
||||
anchors.fill: parent
|
||||
propagateComposedEvents:true
|
||||
onPositionChanged: {
|
||||
mouse.accepted = false
|
||||
}
|
||||
onDoubleClicked: {
|
||||
mouse.accepted = false
|
||||
}
|
||||
onClicked: {
|
||||
mouse.accepted = false
|
||||
}
|
||||
onReleased: {
|
||||
mouse.accepted = false
|
||||
}
|
||||
}
|
||||
|
||||
Loader {
|
||||
id: imageloader
|
||||
|
@ -54,8 +73,6 @@ Item {
|
|||
source: imageType == 0 ? "ImageNormal.qml" : "ImageAnimated.qml"
|
||||
}
|
||||
|
||||
function resetImagePostion(theImage) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ Item {
|
|||
property int operateImageWay:12
|
||||
property bool wheelChange: false
|
||||
property var signPaintList: []
|
||||
property string format: ""
|
||||
|
||||
property int painterType : -1 //记录画笔类型
|
||||
property int painterThickness : 12 //记录画笔粗细
|
||||
|
@ -58,6 +59,51 @@ Item {
|
|||
property double textMouseX: -1000
|
||||
property double textMouseY: -1000
|
||||
|
||||
// "jpg", "jpe", "jpeg", "pbm", "pgm", "ppm", "sr", "ras", "png", "tga", "svg", "gif", "apng", "ico", "xpm", "exr", "psd", "jfi", "jif", "j2k", "jp2", "jng", "wbmp", "xbm", "tiff", "tif", "webp", "pnm", "bmp", "dib"
|
||||
//story 19807
|
||||
//记录历史信息,历史缩放比,历史位置的x,y值
|
||||
property double historyScale: 0
|
||||
property double historyX: 0
|
||||
property double historyY: 0
|
||||
|
||||
//图片打开的初始信息,初始缩放比,初始位置的x,y值
|
||||
property double origScale: 1
|
||||
property double origX: 0
|
||||
property double origY: 0
|
||||
|
||||
//图片上一次的path和当前的path
|
||||
property string historyPath: ""
|
||||
property string currentPath: ""
|
||||
|
||||
//图片自适应
|
||||
property bool needRestoreOrig: true //是否需要回到自适应窗口的状态
|
||||
property bool restoreOrigToToolbar: true // //告诉c++前端需要使图片自适应窗口
|
||||
|
||||
property bool doubleRestore: false //用来判断是否时双击触发的还原自适应
|
||||
property bool controlImageDoubleScale: false //用来判断是否时双击触发的2倍缩放
|
||||
property bool recordCurrentImageHasOperate: false //用来判断当前图片是否被操作过
|
||||
property point histortPos: Qt.point(-1,-1) //历史位置
|
||||
property point wheelVaule: Qt.point(-1,-1) //滚轮值-暂时没有用到
|
||||
property bool restoreToHistory: false//还原到历史状态
|
||||
property bool imageIsDrag: false //判断图片是否为拖拽状态
|
||||
property bool startAni: true //控制动画的播放
|
||||
//story 19807
|
||||
property int currentShowIndex: 0
|
||||
property string imageDefault: "qrc:/res/res/kyview_logo.png"
|
||||
// property var imagelist: ["file:///home/zou/图片/5.png"]
|
||||
//"jpg", "jpe", "jpeg", "pbm", "pgm", "ppm", "sr", "ras", "png", "tga", "svg", "gif", "apng", "ico", "xpm", "exr", "psd", "jfi", "jif", "j2k", "jp2", "jng", "wbmp", "xbm", "tiff", "tif", "webp", "pnm", "bmp", "dib"
|
||||
property var loadImageList:[]; //每次需要加载的图片
|
||||
property int imageTotalNum:0; //图片总数量
|
||||
property int currentImageIndex:-1; //当前图片的位置
|
||||
property string imageDelPath:""; //需要删掉的图片路径
|
||||
property var showImageIndex:[]; //记录当前展示的5个item的所有index,用来加载图片用,与loadImageList是一一对应的
|
||||
property var imageTypeMovieOrNormal:[]; //记录图片是否是动静图
|
||||
property var imagelist: [] //所有图片的list
|
||||
property int addImageNum: 0//每次图片增加的数目
|
||||
property var loadedImageList:[]//记录已经加载过的图片
|
||||
property bool signMouseStart: false
|
||||
property string currentType: "normal"
|
||||
property var imageListEveryAddType: []
|
||||
property bool updateSuorce: false
|
||||
property var hasnotFinishedLoad: []
|
||||
property var imageHasChanged: false//图片是否操作过
|
||||
}
|
||||
|
|
131
res.qrc
|
@ -18,28 +18,6 @@
|
|||
<file>res/cancel_hover.png</file>
|
||||
<file>res/save_hover.png</file>
|
||||
<file>res/save.png</file>
|
||||
<file>res/sp1damaged/1adaptWid_damaged.png</file>
|
||||
<file>res/sp1damaged/1cutImage_damaged.png</file>
|
||||
<file>res/sp1damaged/1delImage_damaged.png</file>
|
||||
<file>res/sp1damaged/1enlarge_damaged.png</file>
|
||||
<file>res/sp1damaged/1filter_damaged.png</file>
|
||||
<file>res/sp1damaged/1flipH_damaged.png</file>
|
||||
<file>res/sp1damaged/1flipV_damaged.png</file>
|
||||
<file>res/sp1damaged/1origSize_damaged.png</file>
|
||||
<file>res/sp1damaged/1reduce_damaged.png</file>
|
||||
<file>res/sp1damaged/1rotate_damaged.png</file>
|
||||
<file>res/sp1damaged/1sign_damaged.png</file>
|
||||
<file>res/sp1damaged/adaptWid_damaged.png</file>
|
||||
<file>res/sp1damaged/cutImage_damaged.png</file>
|
||||
<file>res/sp1damaged/delImage_damaged.png</file>
|
||||
<file>res/sp1damaged/enlarge_damaged.png</file>
|
||||
<file>res/sp1damaged/filter_damaged.png</file>
|
||||
<file>res/sp1damaged/flipH_damaged.png</file>
|
||||
<file>res/sp1damaged/flipV_damaged.png</file>
|
||||
<file>res/sp1damaged/origSize_damaged.png</file>
|
||||
<file>res/sp1damaged/reduce_damaged.png</file>
|
||||
<file>res/sp1damaged/rotate_damaged.png</file>
|
||||
<file>res/sp1damaged/sign_damaged.png</file>
|
||||
<file>res/inteldamaged/1adaptWid_damaged.png</file>
|
||||
<file>res/inteldamaged/1cutImage_damaged.png</file>
|
||||
<file>res/inteldamaged/1delImage_damaged.png</file>
|
||||
|
@ -120,66 +98,8 @@
|
|||
<file>res/intel/rotate.png</file>
|
||||
<file>res/intel/sidebar_hover.png</file>
|
||||
<file>res/intel/sidebar.png</file>
|
||||
<file>res/sp1/1adaptiveWidget_hover.png</file>
|
||||
<file>res/sp1/1adaptiveWidget.png</file>
|
||||
<file>res/sp1/1cutImage_hover.png</file>
|
||||
<file>res/sp1/1cutImage.png</file>
|
||||
<file>res/sp1/1delImage_hover.png</file>
|
||||
<file>res/sp1/1delImage.png</file>
|
||||
<file>res/sp1/1enlarge_hover.png</file>
|
||||
<file>res/sp1/1enlarge.png</file>
|
||||
<file>res/sp1/1filter_hover.png</file>
|
||||
<file>res/sp1/1filter.png</file>
|
||||
<file>res/sp1/1flipH_hover.png</file>
|
||||
<file>res/sp1/1flipH.png</file>
|
||||
<file>res/sp1/1flipV_hover.png</file>
|
||||
<file>res/sp1/1flipV.png</file>
|
||||
<file>res/sp1/1information_hover.png</file>
|
||||
<file>res/sp1/1information.png</file>
|
||||
<file>res/sp1/1labelbar_hover.png</file>
|
||||
<file>res/sp1/1labelbar.png</file>
|
||||
<file>res/sp1/1originalSize_hover.png</file>
|
||||
<file>res/sp1/1originalSize.png</file>
|
||||
<file>res/sp1/1reduce_hover.png</file>
|
||||
<file>res/sp1/1reduce.png</file>
|
||||
<file>res/sp1/1rotate_hover.png</file>
|
||||
<file>res/sp1/1rotate.png</file>
|
||||
<file>res/sp1/1sidebar_hover.png</file>
|
||||
<file>res/sp1/1sidebar.png</file>
|
||||
<file>res/sp1/adaptiveWidget_hover.png</file>
|
||||
<file>res/sp1/adaptiveWidget.png</file>
|
||||
<file>res/sp1/cutImage_hover.png</file>
|
||||
<file>res/sp1/cutImage.png</file>
|
||||
<file>res/sp1/delImage_hover.png</file>
|
||||
<file>res/sp1/delImage.png</file>
|
||||
<file>res/sp1/enlarge_hover.png</file>
|
||||
<file>res/sp1/enlarge.png</file>
|
||||
<file>res/sp1/filter_hover.png</file>
|
||||
<file>res/sp1/filter.png</file>
|
||||
<file>res/sp1/flipH_hover.png</file>
|
||||
<file>res/sp1/flipH.png</file>
|
||||
<file>res/sp1/flipV_hover.png</file>
|
||||
<file>res/sp1/flipV.png</file>
|
||||
<file>res/sp1/information_hover.png</file>
|
||||
<file>res/sp1/information.png</file>
|
||||
<file>res/sp1/labelbar_hover.png</file>
|
||||
<file>res/sp1/labelbar.png</file>
|
||||
<file>res/sp1/originalSize_hover.png</file>
|
||||
<file>res/sp1/originalSize.png</file>
|
||||
<file>res/sp1/reduce_hover.png</file>
|
||||
<file>res/sp1/reduce.png</file>
|
||||
<file>res/sp1/rotate_hover.png</file>
|
||||
<file>res/sp1/rotate.png</file>
|
||||
<file>res/sp1/sidebar_hover.png</file>
|
||||
<file>res/sp1/sidebar.png</file>
|
||||
<file>res/sp1/1ocr.png</file>
|
||||
<file>res/sp1/1ocr_hover.png</file>
|
||||
<file>res/sp1/ocr.png</file>
|
||||
<file>res/sp1/ocr_hover.png</file>
|
||||
<file>res/damaged_imgB.png</file>
|
||||
<file>res/damaged_img.png</file>
|
||||
<file>res/sp1damaged/ocr_damaged.png</file>
|
||||
<file>res/sp1damaged/1ocr_damaged.png</file>
|
||||
<file>res/ocrCancel_W.png</file>
|
||||
<file>res/ocrCancel_B.png</file>
|
||||
<file>res/mark/undo.png</file>
|
||||
|
@ -229,6 +149,56 @@
|
|||
<file>res/left.svg</file>
|
||||
<file>res/1right.svg</file>
|
||||
<file>res/1left.svg</file>
|
||||
<file>res/tiff/left_click_D.png</file>
|
||||
<file>res/tiff/left_click_W.png</file>
|
||||
<file>res/tiff/left_hover_D.png</file>
|
||||
<file>res/tiff/left_hover_W.png</file>
|
||||
<file>res/tiff/left_normal_D.png</file>
|
||||
<file>res/tiff/left_normal_W.png</file>
|
||||
<file>res/tiff/right_click_D.png</file>
|
||||
<file>res/tiff/right_click_W.png</file>
|
||||
<file>res/tiff/right_hover_D.png</file>
|
||||
<file>res/tiff/right_hover_W.png</file>
|
||||
<file>res/tiff/right_normal_D.png</file>
|
||||
<file>res/tiff/right_normal_W.png</file>
|
||||
<file>res/tiff/tiffTool_D.png</file>
|
||||
<file>res/tiff/tiffTool_W.png</file>
|
||||
<file>res/addalbum_black.png</file>
|
||||
<file>res/addalbum_white1.png</file>
|
||||
<file>res/addplus.svg</file>
|
||||
<file>res/cancel_hover.svg</file>
|
||||
<file>res/cancel.svg</file>
|
||||
<file>res/dark-window-close.svg</file>
|
||||
<file>res/little_add.svg</file>
|
||||
<file>res/save_hover.svg</file>
|
||||
<file>res/save.svg</file>
|
||||
<file>res/sp1/adaptiveWidget.svg</file>
|
||||
<file>res/sp1/cutImage.svg</file>
|
||||
<file>res/sp1/delImage.svg</file>
|
||||
<file>res/sp1/enlarge.svg</file>
|
||||
<file>res/sp1/filter.svg</file>
|
||||
<file>res/sp1/flipH.svg</file>
|
||||
<file>res/sp1/flipV.svg</file>
|
||||
<file>res/sp1/information.svg</file>
|
||||
<file>res/sp1/labelbar.svg</file>
|
||||
<file>res/sp1/ocr.svg</file>
|
||||
<file>res/sp1/originalSize.svg</file>
|
||||
<file>res/sp1/reduce.svg</file>
|
||||
<file>res/sp1/rotate.svg</file>
|
||||
<file>res/sp1/sidebar.svg</file>
|
||||
<file>res/mark/arrow.svg</file>
|
||||
<file>res/mark/blur.svg</file>
|
||||
<file>res/mark/bold.svg</file>
|
||||
<file>res/mark/deleteLine.svg</file>
|
||||
<file>res/mark/ellipse.svg</file>
|
||||
<file>res/mark/italics.svg</file>
|
||||
<file>res/mark/markArticle.svg</file>
|
||||
<file>res/mark/menuBtn.svg</file>
|
||||
<file>res/mark/rectangle.svg</file>
|
||||
<file>res/mark/segment.svg</file>
|
||||
<file>res/mark/text.svg</file>
|
||||
<file>res/mark/underLine.svg</file>
|
||||
<file>res/mark/undo.svg</file>
|
||||
</qresource>
|
||||
<qresource prefix="/">
|
||||
<file>showImageComponent.qml</file>
|
||||
|
@ -248,5 +218,6 @@
|
|||
<file>signcanvas/FuzzyPage.qml</file>
|
||||
<file>signcanvas/CirclePage.qml</file>
|
||||
<file>signcanvas/SignBase.qml</file>
|
||||
<file>CoverFlow.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="39px" height="39px" viewBox="0 0 39 39" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>icon/ add plus</title>
|
||||
<g id="icon/-add-plus" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.796039">
|
||||
<g fill="#000000">
|
||||
<path d="M1.5,18 L37.5,18 C38.3284271,18 39,18.6715729 39,19.5 C39,20.3284271 38.3284271,21 37.5,21 L1.5,21 C0.671572875,21 1.01453063e-16,20.3284271 0,19.5 C-1.01453063e-16,18.6715729 0.671572875,18 1.5,18 Z" id="矩形备份-2"></path>
|
||||
<path d="M1.5,18 L37.5,18 C38.3284271,18 39,18.6715729 39,19.5 C39,20.3284271 38.3284271,21 37.5,21 L1.5,21 C0.671572875,21 1.01453063e-16,20.3284271 0,19.5 C-1.01453063e-16,18.6715729 0.671572875,18 1.5,18 Z" id="矩形备份-3" transform="translate(19.500000, 19.500000) rotate(90.000000) translate(-19.500000, -19.500000) "></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 980 B |
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>切片</title>
|
||||
<g id="看图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-opacity="0.780075393">
|
||||
<g id="18、裁剪操作" transform="translate(-926.000000, -862.000000)" stroke="#FF2626" stroke-width="2">
|
||||
<g id="裁剪操作栏" transform="translate(906.000000, 854.000000)">
|
||||
<g id="icon取消" transform="translate(20.000000, 8.000000)">
|
||||
<path d="M4.69565217,19.3043478 L19.3043478,4.69565217 M4.69565217,4.69565217 L19.3043478,19.3043478" id="关闭"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 832 B |
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>切片</title>
|
||||
<g id="看图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-opacity="0.780075393">
|
||||
<g id="18、裁剪操作" transform="translate(-927.000000, -925.000000)" stroke="#D30000" stroke-width="2">
|
||||
<g id="裁剪操作栏" transform="translate(907.000000, 917.000000)">
|
||||
<g id="icon取消-hover" transform="translate(20.000000, 8.000000)">
|
||||
<path d="M4.69565217,19.3043478 L19.3043478,4.69565217 M4.69565217,4.69565217 L19.3043478,19.3043478" id="关闭"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 838 B |
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>add 深</title>
|
||||
<defs>
|
||||
<filter id="filter-1">
|
||||
<feColorMatrix in="SourceGraphic" type="matrix" values="0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 1.000000 0"></feColorMatrix>
|
||||
</filter>
|
||||
</defs>
|
||||
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.54" stroke-linecap="round">
|
||||
<g id="23、工具栏-信息-深" transform="translate(-467.000000, -287.000000)">
|
||||
<g id="侧栏" transform="translate(420.000000, 259.000000)">
|
||||
<g id="图片" transform="translate(8.000000, 8.000000)">
|
||||
<g id="icon/-add-medium" transform="translate(39.000000, 20.000000)" filter="url(#filter-1)">
|
||||
<g transform="translate(0.500000, 1.000000)">
|
||||
<line x1="7.5" y1="2.84511997e-14" x2="7.5" y2="14" id="直线" stroke="#000000" stroke-width="2"></line>
|
||||
<line x1="7.5" y1="2.84511997e-14" x2="7.5" y2="14" id="直线备份" stroke="#000000" stroke-width="2" transform="translate(7.500000, 7.000000) rotate(-90.000000) translate(-7.500000, -7.000000) "></line>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>切片</title>
|
||||
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.778064546" stroke-linecap="round">
|
||||
<g id="16、截图-状态一览" transform="translate(-1299.000000, -776.000000)" stroke="#040404" stroke-width="2">
|
||||
<g id="编组-2" transform="translate(1048.000000, 766.000000)">
|
||||
<g id="箭头" transform="translate(251.000000, 10.000000)">
|
||||
<g id="编组-2" transform="translate(5.000000, 5.000000)">
|
||||
<g id="编组">
|
||||
<line x1="0.5" y1="0.5" x2="6.5" y2="0.5" id="直线-7"></line>
|
||||
<line x1="0.5" y1="0.5" x2="0.5" y2="6.5" id="直线-8"></line>
|
||||
</g>
|
||||
<line x1="1" y1="1" x2="13.7279221" y2="13.7279221" id="直线"></line>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 9.2 KiB |
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>切片</title>
|
||||
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="16、截图-状态一览" transform="translate(-1172.000000, -298.000000)" fill="#333333" fill-rule="nonzero">
|
||||
<g id="字体副操作栏" transform="translate(1048.000000, 246.001984)">
|
||||
<g id="字体区" transform="translate(10.000000, 16.998016)">
|
||||
<g id="类型" transform="translate(0.000000, 32.000000)">
|
||||
<g id="加粗" transform="translate(98.000000, 0.000000)">
|
||||
<g id="icon/-12/-加粗" transform="translate(16.000000, 3.000000)">
|
||||
<path d="M10.4666659,7.51399943 C10.96998,6.91468338 11.2473849,6.157953 11.2506658,5.37533298 C11.2506658,3.51118805 9.73947777,2 7.87533284,2 L3,2 L3,14 L8.43799944,14 C9.99556154,14.0012961 11.3730528,12.9897273 11.8380089,11.5031819 C12.3029649,10.0166365 11.7473744,8.40044571 10.4666659,7.51399943 L10.4666659,7.51399943 Z M5,4 L8,4 C8.53589803,4 9.03108851,4.28589834 9.29903769,4.74999991 C9.56698686,5.21410148 9.56698686,5.7858982 9.29903769,6.24999978 C9.03108851,6.71410135 8.53589803,7 8,7 L5,7 L5,4 L5,4 Z M8.39300451,12 L5,12 L5,9 L8.39300451,9 C9.28052361,9 10,9.67157288 10,10.5 C10,11.3284271 9.28052361,12 8.39300451,12 Z" id="形状"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>切片</title>
|
||||
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="16、截图-状态一览" transform="translate(-1074.000000, -298.000000)" fill="#333333">
|
||||
<g id="字体副操作栏" transform="translate(1048.000000, 246.001984)">
|
||||
<g id="字体区" transform="translate(10.000000, 16.998016)">
|
||||
<g id="类型" transform="translate(0.000000, 32.000000)">
|
||||
<g id="icon/-12/-删除线" transform="translate(16.000000, 3.000000)">
|
||||
<path d="M9,10 L9,14 L7,14 L7,10 L9,10 Z M13.5,8 C13.7761424,8 14,8.22385763 14,8.5 C14,8.77614237 13.7761424,9 13.5,9 L2.5,9 C2.22385763,9 2,8.77614237 2,8.5 C2,8.22385763 2.22385763,8 2.5,8 L13.5,8 Z M13,2 L13,4 L9,4 L9,7 L7,7 L7,4 L3,4 L3,2 L13,2 Z" id="形状结合"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>切片</title>
|
||||
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-opacity="0.78">
|
||||
<g id="16、截图-状态一览" transform="translate(-1211.000000, -776.000000)" stroke="#000000" stroke-width="2">
|
||||
<g id="编组-2" transform="translate(1048.000000, 766.000000)">
|
||||
<g id="椭圆形" transform="translate(163.000000, 10.000000)">
|
||||
<circle cx="12" cy="12" r="8"></circle>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 723 B |
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>切片</title>
|
||||
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="16、截图-状态一览" transform="translate(-1220.000000, -298.000000)" fill="#333333" fill-rule="nonzero">
|
||||
<g id="字体副操作栏" transform="translate(1048.000000, 246.001984)">
|
||||
<g id="字体区" transform="translate(10.000000, 16.998016)">
|
||||
<g id="类型" transform="translate(0.000000, 32.000000)">
|
||||
<g id="斜体" transform="translate(147.000000, 0.000000)">
|
||||
<g id="icon/-12/-斜体" transform="translate(15.000000, 3.000000)">
|
||||
<polygon id="路径" points="13 2 13 2.8573913 11.3329106 2.8573913 7.1677234 13.1426087 8.83312199 13.1426087 8.83312199 14 3 14 3 13.1426087 4.66624398 13.1426087 8.83312199 2.8573913 7.16687801 2.8573913 7.16687801 2"></polygon>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>切片</title>
|
||||
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" fill-opacity="0.74">
|
||||
<g id="16、截图-状态一览" transform="translate(-1387.000000, -776.000000)" fill="#000000" fill-rule="nonzero">
|
||||
<g id="编组-2" transform="translate(1048.000000, 766.000000)">
|
||||
<g id="mark条" transform="translate(339.000000, 10.000000)">
|
||||
<polygon transform="translate(12.000000, 12.000000) scale(-1, 1) translate(-12.000000, -12.000000) " points="18 3 18 21 11.999957 14.5715127 6 21 6 3"></polygon>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 842 B |
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="13px" height="7px" viewBox="0 0 13 7" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>下拉</title>
|
||||
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="16、截图-状态一览" transform="translate(-1629.000000, -467.000000)" fill="#000000" fill-rule="nonzero">
|
||||
<g id="操作栏备份-7" transform="translate(1048.000000, 447.000000)">
|
||||
<g id="选项" transform="translate(544.000000, 9.000000)">
|
||||
<path d="M49.7938303,11.3709507 C50.0014236,11.6370634 50.0188436,11.9706418 49.8327005,12.1159808 L43.7615179,16.8516541 C43.7195328,16.8845602 43.5846163,16.965578 43.561675,16.9910437 C43.3354806,17.2410798 43.0102432,17.3161335 42.8348178,17.1578181 L37.1170399,12.0017616 C36.9416145,11.8432986 36.9821234,11.5118165 37.2083326,11.2612046 C37.4345417,11.0107256 37.7597644,10.9359524 37.9357803,11.0942678 L43.1395203,15.7866125 L49.0806729,11.1521819 C49.2674065,11.006843 49.5866946,11.1049855 49.7938303,11.3709507 L49.7938303,11.3709507 Z" id="下拉"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>切片</title>
|
||||
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-opacity="0.78">
|
||||
<g id="16、截图-状态一览" transform="translate(-1167.000000, -776.000000)" stroke="#000000" stroke-width="2">
|
||||
<g id="编组-2" transform="translate(1048.000000, 766.000000)">
|
||||
<g id="矩形" transform="translate(119.000000, 10.000000)">
|
||||
<rect x="4" y="4" width="16" height="16" rx="2"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 736 B |
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>切片</title>
|
||||
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-opacity="0.780075393">
|
||||
<g id="16、截图-状态一览" transform="translate(-1255.000000, -776.000000)" stroke="#040404" stroke-width="2">
|
||||
<g id="编组-2" transform="translate(1048.000000, 766.000000)">
|
||||
<g id="线段" transform="translate(207.000000, 10.000000)">
|
||||
<line x1="11.3760823" y1="2.72442281" x2="12.6239177" y2="21.2755772" id="直线-5" transform="translate(12.000000, 12.000000) rotate(-135.000000) translate(-12.000000, -12.000000) "></line>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 901 B |
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>切片</title>
|
||||
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" fill-opacity="0.78">
|
||||
<g id="16、截图-状态一览" transform="translate(-1431.000000, -551.000000)" fill="#000000">
|
||||
<g id="操作栏备份-8" transform="translate(1048.000000, 541.000000)">
|
||||
<g id="文字" transform="translate(383.000000, 10.000000)">
|
||||
<path d="M4,6 L4,4 L20,4 L20,6 L13,6 L13,20 L11,20 L11,6 L4,6 Z" id="形状结合"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 759 B |
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>切片</title>
|
||||
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="16、截图-状态一览" transform="translate(-1123.000000, -298.000000)" stroke="#333333">
|
||||
<g id="字体副操作栏" transform="translate(1048.000000, 246.001984)">
|
||||
<g id="字体区" transform="translate(10.000000, 16.998016)">
|
||||
<g id="类型" transform="translate(0.000000, 32.000000)">
|
||||
<g id="下划线" transform="translate(49.000000, 0.000000)">
|
||||
<g id="icon/-12/-下划线" transform="translate(16.000000, 3.000000)">
|
||||
<g id="下划线" transform="translate(3.000000, 2.000000)">
|
||||
<path d="M8,0 L8,6 C8,7.65685425 6.65685425,9 5,9 C3.34314575,9 2,7.65685425 2,6 L2,0 L2,0" id="矩形" stroke-width="2"></path>
|
||||
<rect id="矩形" x="0.5" y="11.5" width="9" height="1" rx="0.5"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>切片</title>
|
||||
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.76">
|
||||
<g id="16、截图-状态一览" transform="translate(-1548.000000, -551.000000)" stroke="#000000">
|
||||
<g id="操作栏备份-8" transform="translate(1048.000000, 541.000000)">
|
||||
<g id="撤销" transform="translate(500.000000, 10.000000)">
|
||||
<g id="编组" transform="translate(3.000000, 3.000000)">
|
||||
<path d="M2.20577137,13.7477877 C4.55258969,17.8125963 9.75024026,19.2053025 13.8150488,16.8584842 C17.8798574,14.5116659 19.2725637,9.31401533 16.9257454,5.24920675 C15.1557768,2.1835313 11.764208,0.637791621 8.46003874,1.06991288 C7.38317821,1.21074536 6.31560101,1.56166045 5.31646789,2.13851023 C4.01394409,2.89052269 2.98579509,3.93526217 2.26714239,5.14165346" id="椭圆形" stroke-width="2" stroke-linecap="round"></path>
|
||||
<path d="M0.646446609,0.646446609 C1.13807119,0.5 1.26307119,0.555964406 1.35355339,0.646446609 C1.44403559,0.736928813 1.5,0.861928813 1.5,1 L1.5,1 L1.5,5.5 L6,5.5 C6.13807119,5.5 6.26307119,5.55596441 6.35355339,5.64644661 C6.44403559,5.73692881 6.5,5.86192881 6.5,6 C6.5,6.13807119 6.44403559,6.26307119 6.35355339,6.35355339 C6.26307119,6.44403559 6.13807119,6.5 6,6.5 L6,6.5 L1,6.5 C0.861928813,6.5 0.736928813,6.44403559 0.646446609,6.35355339 C0.555964406,6.26307119 0.5,6.13807119 0.5,6 L0.5,6 L0.5,1 C0.5,0.861928813 0.555964406,0.736928813 0.646446609,0.646446609 Z" id="形状结合"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>切片</title>
|
||||
<g id="看图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round">
|
||||
<g id="18、裁剪操作" transform="translate(-970.000000, -862.000000)" stroke="#22B600" stroke-width="2">
|
||||
<g id="裁剪操作栏" transform="translate(906.000000, 854.000000)">
|
||||
<g id="icon确定" transform="translate(64.000000, 8.000000)">
|
||||
<path d="M8,19 L22,6 M2,12 L8,19" id="关闭"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 735 B |
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>切片</title>
|
||||
<g id="看图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round">
|
||||
<g id="18、裁剪操作" transform="translate(-971.000000, -925.000000)" stroke="#198700" stroke-width="2">
|
||||
<g id="裁剪操作栏" transform="translate(907.000000, 917.000000)">
|
||||
<g id="icon确定-hover" transform="translate(64.000000, 8.000000)">
|
||||
<path d="M8,19 L22,6 M2,12 L8,19" id="关闭"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 741 B |
Before Width: | Height: | Size: 477 B |
Before Width: | Height: | Size: 459 B |
Before Width: | Height: | Size: 300 B |
Before Width: | Height: | Size: 300 B |
Before Width: | Height: | Size: 430 B |
Before Width: | Height: | Size: 381 B |
Before Width: | Height: | Size: 539 B |
Before Width: | Height: | Size: 511 B |
Before Width: | Height: | Size: 776 B |
Before Width: | Height: | Size: 718 B |
Before Width: | Height: | Size: 451 B |
Before Width: | Height: | Size: 427 B |
Before Width: | Height: | Size: 458 B |
Before Width: | Height: | Size: 455 B |
Before Width: | Height: | Size: 819 B |
Before Width: | Height: | Size: 760 B |
Before Width: | Height: | Size: 528 B |
Before Width: | Height: | Size: 512 B |
BIN
res/sp1/1ocr.png
Before Width: | Height: | Size: 414 B |
Before Width: | Height: | Size: 385 B |
Before Width: | Height: | Size: 540 B |
Before Width: | Height: | Size: 506 B |
Before Width: | Height: | Size: 497 B |
Before Width: | Height: | Size: 478 B |
Before Width: | Height: | Size: 585 B |
Before Width: | Height: | Size: 533 B |
Before Width: | Height: | Size: 412 B |
Before Width: | Height: | Size: 371 B |
Before Width: | Height: | Size: 492 B |
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>适应窗口</title>
|
||||
<g id="适应窗口" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.697846912">
|
||||
<g id="适应窗口icon" stroke="#000000">
|
||||
<g id="适应窗口" transform="translate(1.000000, 1.000000)" stroke-width="2">
|
||||
<rect id="矩形" x="1" y="1" width="20" height="20" rx="4"></rect>
|
||||
</g>
|
||||
<g id="编组" transform="translate(6.000000, 6.000000)" stroke-width="1.2">
|
||||
<polyline id="矩形" transform="translate(2.142857, 2.142857) rotate(-90.000000) translate(-2.142857, -2.142857) " points="-8.8817842e-16 -3.05613961e-14 4.28571429 -3.05613961e-14 4.28571429 4.28571429"></polyline>
|
||||
<polyline id="矩形备份-2" transform="translate(2.142857, 9.857143) scale(1, -1) rotate(-90.000000) translate(-2.142857, -9.857143) " points="-1.33226763e-15 7.71428571 4.28571429 7.71428571 4.28571429 12"></polyline>
|
||||
<polyline id="矩形备份" transform="translate(9.857143, 2.142857) scale(-1, 1) rotate(-90.000000) translate(-9.857143, -2.142857) " points="7.71428571 -3.00711836e-14 12 -3.00711836e-14 12 4.28571429"></polyline>
|
||||
<polyline id="矩形备份-3" transform="translate(9.857143, 9.857143) scale(-1, -1) rotate(-90.000000) translate(-9.857143, -9.857143) " points="7.71428571 7.71428571 12 7.71428571 12 12"></polyline>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 435 B |
Before Width: | Height: | Size: 290 B |
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>裁剪</title>
|
||||
<g id="裁剪" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.701381138" stroke-linecap="round">
|
||||
<g id="编组" stroke="#000000" stroke-width="2">
|
||||
<g id="编组-2" transform="translate(3.000000, 3.000000)">
|
||||
<path d="M0,3 L14,3 C14.5522847,3 15,3.44771525 15,4 L15,18 L15,18" id="矩形"></path>
|
||||
<path d="M3,0 L17,0 C17.5522847,-1.01453063e-16 18,0.44771525 18,1 L18,15 L18,15" id="矩形备份-10" transform="translate(10.500000, 7.500000) scale(-1, -1) translate(-10.500000, -7.500000) "></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 835 B |
Before Width: | Height: | Size: 286 B |
Before Width: | Height: | Size: 434 B |
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>删除</title>
|
||||
<g id="删除" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.698776972">
|
||||
<g id="编组" transform="translate(1.000000, 2.000000)">
|
||||
<path d="M6,3 L6,1 C6,0.44771525 6.44771525,3.87621135e-15 7,3.77475828e-15 L15,3.77475828e-15 C15.5522847,3.67330522e-15 16,0.44771525 16,1 L16,3 L16,3" id="矩形" stroke="#000000" stroke-width="2"></path>
|
||||
<path d="M4,20 L4,6 C4,4.34314575 5.34314575,3 7,3 L15,3 C16.6568542,3 18,4.34314575 18,6 L18,20 L18,20" id="矩形备份" stroke="#000000" stroke-width="2" transform="translate(11.000000, 11.500000) scale(1, -1) translate(-11.000000, -11.500000) "></path>
|
||||
<rect id="矩形" fill="#000000" opacity="0.849999964" x="8" y="8" width="1.5" height="8" rx="0.75"></rect>
|
||||
<rect id="矩形备份-2" fill="#000000" opacity="0.849999964" x="12.5" y="8" width="1.5" height="8" rx="0.75"></rect>
|
||||
<rect id="矩形" fill="#000000" x="0" y="3" width="22" height="2" rx="1"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 371 B |
Before Width: | Height: | Size: 569 B |
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>放大</title>
|
||||
<g id="放大" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.695731027">
|
||||
<g id="放大" stroke="#000000" transform="translate(2.000000, 2.000000)">
|
||||
<circle id="椭圆形" stroke-width="1.4" cx="10" cy="10" r="9.3"></circle>
|
||||
<line x1="6" y1="10" x2="14" y2="10" id="直线" stroke-width="2" stroke-linecap="round"></line>
|
||||
<line x1="6" y1="10" x2="14" y2="10" id="直线备份" stroke-width="2" stroke-linecap="round" transform="translate(10.000000, 10.000000) rotate(90.000000) translate(-10.000000, -10.000000) "></line>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 835 B |
Before Width: | Height: | Size: 491 B |
Before Width: | Height: | Size: 729 B |
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>滤镜</title>
|
||||
<g id="滤镜" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.698776972">
|
||||
<g id="编组" transform="translate(0.000000, 0.000000)" fill="#000000" fill-rule="nonzero">
|
||||
<g id="滤镜icon">
|
||||
<path d="M13.4778223,2.32903187 C15.0419986,2.85977397 16.2618461,3.9594872 16.9784128,5.32547616 C17.6748277,6.65304966 17.8958429,8.23211715 17.4956472,9.78440455 C17.6895606,9.83997038 17.8807261,9.90480768 18.0684045,9.97866943 C19.6022752,10.5802118 20.8329628,11.7727053 21.4861389,13.2904297 C22.0799867,14.6637054 22.1452376,16.1519817 21.7535964,17.5071026 C21.361914,18.862366 20.5132583,20.0844223 19.279447,20.9251543 C18.0454085,21.7660412 16.6007556,22.1064628 15.2017042,21.9712379 C13.8458269,21.8401859 12.5327504,21.2623852 11.495606,20.2603998 C10.6316808,21.093175 9.56710894,21.6388633 8.43868894,21.8695503 C7.266997,22.1090836 6.02645359,22.0089988 4.870158,21.5379846 C3.71400319,21.0670277 2.75468262,20.2710925 2.08035079,19.2796687 C1.40612769,18.2884047 1.01680954,17.1017159 1.00053136,15.8491127 C0.984253255,14.5965152 1.3425979,13.4000331 1.99082912,12.3914425 C2.63916257,11.382693 3.57746567,10.561896 4.72123901,10.0606922 C4.97203712,9.95140464 5.22962839,9.85869887 5.49236143,9.78293589 C5.16239219,8.51006563 5.243929,7.16340207 5.72718117,5.938433 C6.33410001,4.39655337 7.48955582,3.22888713 8.88425409,2.57932239 C10.2791783,1.92965242 11.9134444,1.79822138 13.4778223,2.32903187 Z M8.78079058,11.726202 C7.86836375,11.363664 6.8917472,11.3316823 5.99717663,11.5882207 C5.10247695,11.8447962 4.28986555,12.389963 3.70570656,13.1816557 C3.12139624,13.9735535 2.83860478,14.9132078 2.85465158,15.8476755 C2.87069823,16.7821346 3.1855784,17.7114315 3.79672506,18.4826209 C4.40771042,19.2536068 5.23854568,19.7703059 6.1415101,19.995748 C7.04435894,20.2211613 8.01929845,20.1553813 8.9185789,19.761536 C9.97380655,19.3042519 10.8026423,18.4425246 11.2210627,17.3682069 C11.6592251,16.2521528 11.6043792,15.0615814 11.162398,14.0399822 C10.7204818,13.0185331 9.89148533,12.1659155 8.78079058,11.726202 Z M16.1580474,11.4369131 C14.8406485,11.3250191 13.5407993,11.8361467 12.6403771,12.7942012 C12.7276828,12.9563083 12.8081036,13.1220026 12.8812852,13.2909698 C13.5409985,14.8044354 13.5703606,16.5203721 12.9626924,18.0560044 C12.8694752,18.2934567 12.7618694,18.5252419 12.640575,18.7498436 C13.0764264,19.2199853 13.6122165,19.5861331 14.2085732,19.8207933 C15.3197661,20.2604097 16.5053991,20.2049064 17.5227439,19.7605664 C18.5402712,19.3161468 19.3894847,18.4827584 19.8274327,17.3664599 C20.2487806,16.2930028 20.2278991,15.095396 19.7693911,14.0374322 C19.3109865,12.9797068 18.4527133,12.1482982 17.3835265,11.7264657 C17.0022018,11.5754234 16.6018039,11.4790757 16.1580474,11.4369131 Z M13.0821131,4.17311422 C11.9718374,3.73546762 10.7868012,3.7917422 9.77010921,4.23610412 C8.75355372,4.68040635 7.9052537,5.51269625 7.46796534,6.627336 C7.0956674,7.56050861 7.06206128,8.59285388 7.37011984,9.54575664 C8.91240406,9.59381191 10.3820767,10.2136656 11.4956614,11.2849176 C12.607993,10.2149125 14.0759172,9.59552879 15.6164406,9.54727238 C15.960395,8.47414099 15.8663271,7.35739829 15.4275128,6.39999389 C14.9764093,5.41577699 14.1609495,4.59992499 13.0821131,4.17311422 Z" id="形状"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 679 B |
Before Width: | Height: | Size: 421 B |
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>镜像</title>
|
||||
<g id="镜像" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.700172061">
|
||||
<g id="编组" fill-rule="nonzero">
|
||||
<g id="镜像" transform="translate(12.000000, 12.500000) rotate(-360.000000) translate(-12.000000, -12.500000) translate(3.000000, 4.000000)">
|
||||
<path d="M0.870524871,0.859223293 L6.85419413,2.70397765 C6.95800239,2.75469723 7.04409335,2.81819716 7.1053047,2.89782707 C7.15425226,2.961503 7.18448911,3.03497838 7.19697852,3.11410857 L7.19697852,3.11410857 L7.20372265,13.8264474 C7.20372265,13.926127 7.17767716,14.0199042 7.1310156,14.0996445 C7.09582524,14.1597815 7.04904493,14.2121593 6.99306343,14.2516331 L6.99306343,14.2516331 L1.08417299,16.1773928 C0.994269711,16.1708714 0.915791425,16.1493094 0.858554018,16.1007314 C0.815873838,16.0645083 0.8,16.0102255 0.8,15.9546774 L0.8,15.9546774 L0.8,1.04297361 C0.8,0.971932778 0.825427167,0.906276838 0.870524871,0.859223293 L0.870524871,0.859223293 Z" id="路径" stroke="#000000" stroke-width="1.6"></path>
|
||||
<path d="M17.0025635,-1.70530257e-13 C16.9305188,-1.70530257e-13 16.8629768,0.00939615863 16.7954349,0.0211413569 L10.8967701,1.94735388 C10.9057757,1.94500484 10.9125299,1.94500484 10.9170327,1.9426558 C10.3879539,2.09534337 9.99846196,2.6003869 9.99846196,3.19939201 L9.99846196,13.8240984 C9.99846196,14.3291419 10.2731326,14.7660633 10.676133,14.984524 L16.7909321,16.9788586 C16.8562226,16.9929529 16.9282674,17 17.0003122,17 C17.5519049,17 17.9999669,16.5325411 17.9999669,15.9546774 L17.9999669,1.04297361 C18.004436,0.467458892 17.5564076,-1.70530257e-13 17.0025635,-1.70530257e-13 Z" id="路径" fill="#000000" opacity="0.900000036"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 409 B |
Before Width: | Height: | Size: 447 B |
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>镜像上下</title>
|
||||
<g id="镜像上下" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.700172061">
|
||||
<g id="编组" fill-rule="nonzero">
|
||||
<g id="镜像" transform="translate(12.500000, 12.000000) rotate(90.000000) translate(-12.500000, -12.000000) translate(3.500000, 3.500000)">
|
||||
<path d="M0.870524871,0.859223293 L6.85419413,2.70397765 C6.95800239,2.75469723 7.04409335,2.81819716 7.1053047,2.89782707 C7.15425226,2.961503 7.18448911,3.03497838 7.19697852,3.11410857 L7.19697852,3.11410857 L7.20372265,13.8264474 C7.20372265,13.926127 7.17767716,14.0199042 7.1310156,14.0996445 C7.09582524,14.1597815 7.04904493,14.2121593 6.99306343,14.2516331 L6.99306343,14.2516331 L1.08417299,16.1773928 C0.994269711,16.1708714 0.915791425,16.1493094 0.858554018,16.1007314 C0.815873838,16.0645083 0.8,16.0102255 0.8,15.9546774 L0.8,15.9546774 L0.8,1.04297361 C0.8,0.971932778 0.825427167,0.906276838 0.870524871,0.859223293 L0.870524871,0.859223293 Z" id="路径" stroke="#000000" stroke-width="1.6"></path>
|
||||
<path d="M17.0025635,-1.70530257e-13 C16.9305188,-1.70530257e-13 16.8629768,0.00939615863 16.7954349,0.0211413569 L10.8967701,1.94735388 C10.9057757,1.94500484 10.9125299,1.94500484 10.9170327,1.9426558 C10.3879539,2.09534337 9.99846196,2.6003869 9.99846196,3.19939201 L9.99846196,13.8240984 C9.99846196,14.3291419 10.2731326,14.7660633 10.676133,14.984524 L16.7909321,16.9788586 C16.8562226,16.9929529 16.9282674,17 17.0003122,17 C17.5519049,17 17.9999669,16.5325411 17.9999669,15.9546774 L17.9999669,1.04297361 C18.004436,0.467458892 17.5564076,-1.70530257e-13 17.0025635,-1.70530257e-13 Z" id="路径" fill="#000000" opacity="0.900000036"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 435 B |
Before Width: | Height: | Size: 802 B |
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>信息</title>
|
||||
<g id="信息" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.698195685">
|
||||
<g id="编组" fill-rule="nonzero">
|
||||
<g id="信息" transform="translate(1.000000, 0.999997)">
|
||||
<path d="M11.007032,22 C6.55676196,22.0027822 2.54327787,19.3237757 0.83894937,15.2127934 C-0.865379135,11.1018111 0.075283932,6.36891739 3.22210066,3.22210066 C6.36891739,0.075283932 11.1018111,-0.865379135 15.2127934,0.83894937 C19.3237757,2.54327787 22.0027822,6.55676196 22,11.007032 C21.9924324,17.0751437 17.0751437,21.9924324 11.007032,22 L11.007032,22 Z" id="路径" stroke="#000000" stroke-width="2"></path>
|
||||
<g id="编组-3" opacity="0.949999988" transform="translate(8.000000, 4.000003)" fill="#000000">
|
||||
<path d="M1.87047168,12.5906542 L0.77623403,12.5906542 C0.379123006,12.5906542 0.0572009156,12.9125763 0.0572009156,13.3096873 C0.0572009156,13.7067983 0.379123006,14.0287204 0.77623403,14.0287204 L5.09043266,14.0287204 C5.48754368,14.0287204 5.80946577,13.7067983 5.80946577,13.3096873 C5.80946577,12.9125763 5.48754368,12.5906542 5.09043266,12.5906542 L4.027571,12.5906542 L4.027571,4.87995781 C4.02779657,4.41254085 3.72692003,3.99817578 3.28239123,3.85370148 C3.19763422,3.81944465 3.10711304,3.8016954 3.01569532,3.80140816 L3.00523666,3.80140816 C2.96821935,3.79953061 2.93113067,3.79953061 2.89411336,3.80140816 L1.3475385,3.80140816 C0.950485454,3.80149012 0.628653821,4.1233882 0.628653821,4.52044126 C0.628653821,4.91749432 0.950485454,5.23939239 1.3475385,5.23947436 L2.01820029,5.23947436 L2.01820029,12.5906542 L1.87047168,12.5906542 Z" id="路径"></path>
|
||||
<path d="M2.86666667,7.32747196e-15 C2.09346802,7.32747196e-15 1.46666667,0.62680135 1.46666667,1.4 C1.46666667,2.17319865 2.09346802,2.8 2.86666667,2.8 C3.63986532,2.8 4.26666667,2.17319865 4.26666667,1.4 C4.26666667,0.62680135 3.63986532,7.32747196e-15 2.86666667,7.32747196e-15 L2.86666667,7.32747196e-15 Z" id="路径"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 732 B |
Before Width: | Height: | Size: 512 B |
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>标注</title>
|
||||
<g id="标注" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.702148438">
|
||||
<g id="标注" transform="translate(2.000000, 3.000000)">
|
||||
<path d="M5.61097947,1 L15.5,1 C16.8807119,1 18,2.11928813 18,3.5 L18,15.5 C18,16.8807119 16.8807119,18 15.5,18 L3.5,18 C2.11928813,18 1,16.8807119 1,15.5 L1,10.0399084 L1,10.0399084" id="矩形" stroke="#000000" stroke-width="1.6" opacity="0.981179836" stroke-linecap="round" transform="translate(9.500000, 9.500000) scale(-1, 1) translate(-9.500000, -9.500000) "></path>
|
||||
<path d="M20.6233505,1.25944115 C20.8960257,1.53369754 21.0335557,1.92560598 20.9930122,2.33261838 C20.9550677,2.70839552 20.7868957,3.05907092 20.5176193,3.32391616 L12.471714,11.3703605 L8,13 L9.63207624,8.52922318 L17.6771865,0.481983861 C18.2758,-0.116610543 19.2011467,-0.164307317 19.7409322,0.376256034 L20.6233505,1.2586462 L20.6233505,1.25944115 Z" id="路径" fill="#000000" fill-rule="nonzero"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 485 B |
BIN
res/sp1/ocr.png
Before Width: | Height: | Size: 721 B |
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>orc</title>
|
||||
<g id="orc" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.695731027">
|
||||
<g id="编组-4" transform="translate(2.000000, 2.000000)">
|
||||
<g id="编组-2" stroke="#000000" stroke-width="2">
|
||||
<path d="M12,12 L17,12 C18.6568542,12 20,13.3431458 20,15 L20,20 L20,20" id="矩形备份" transform="translate(16.000000, 16.000000) scale(1, -1) translate(-16.000000, -16.000000) "></path>
|
||||
<path d="M0,12 L5,12 C6.65685425,12 8,13.3431458 8,15 L8,20 L8,20" id="矩形备份-2" transform="translate(4.000000, 16.000000) scale(-1, -1) translate(-4.000000, -16.000000) "></path>
|
||||
<path d="M12,0 L17,0 C18.6568542,-3.04359188e-16 20,1.34314575 20,3 L20,8 L20,8" id="矩形"></path>
|
||||
<path d="M0,0 L5,0 C6.65685425,-3.04359188e-16 8,1.34314575 8,3 L8,8 L8,8" id="矩形备份-11" transform="translate(4.000000, 4.000000) scale(-1, 1) translate(-4.000000, -4.000000) "></path>
|
||||
</g>
|
||||
<g id="编组-3" transform="translate(5.000000, 6.000000)" fill="#000000">
|
||||
<rect id="矩形" x="0" y="0" width="10" height="2"></rect>
|
||||
<rect id="矩形备份-3" transform="translate(5.000000, 4.500000) rotate(90.000000) translate(-5.000000, -4.500000) " x="0.5" y="3.5" width="9" height="2"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 354 B |
Before Width: | Height: | Size: 541 B |
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>原始大小</title>
|
||||
<g id="原始大小" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.703404018">
|
||||
<g id="编组" transform="translate(1.000000, 1.000000)">
|
||||
<rect id="矩形" stroke="#000000" stroke-width="2" x="1" y="1" width="20" height="20" rx="4"></rect>
|
||||
<path d="M16.391375,17.01425 C15.917,17.01425 15.692875,16.8025 15.692875,16.391375 L15.692875,6.6935 L14.172125,6.6935 C13.798125,6.6935 13.59875,6.48175 13.59875,6.05825 C13.59875,5.721375 13.78575,5.534375 14.172125,5.484875 L16.702125,5.484875 C17.001875,5.484875 17.15175,5.608625 17.15175,5.858875 L17.15175,16.379 C17.11325,16.8025 16.852,17.01425 16.391375,17.01425 Z M11.0055,14.77025 C10.45825,14.77025 10.18325,14.521375 10.18325,14.009875 C10.220375,13.54925 10.495375,13.27425 11.0055,13.187625 C11.4675,13.27425 11.741125,13.54925 11.829125,14.009875 C11.790625,14.521375 11.517,14.77025 11.0055,14.77025 Z M11.0055,9.447625 C10.495375,9.4105 10.220375,9.112125 10.18325,8.5635 C10.220375,8.1015 10.495375,7.827875 11.0055,7.739875 C11.4675,7.827875 11.741125,8.1015 11.829125,8.5635 C11.741125,9.112125 11.4675,9.4105 11.0055,9.447625 Z M6.63025,17.01425 C6.169625,17.01425 5.933125,16.8025 5.933125,16.391375 L5.933125,6.6935 L4.412375,6.6935 C4.038375,6.6935 3.839,6.48175 3.839,6.05825 C3.839,5.721375 4.026,5.534375 4.412375,5.484875 L6.942375,5.484875 C7.242125,5.484875 7.392,5.608625 7.392,5.858875 L7.392,16.379 C7.3535,16.8025 7.09225,17.01425 6.63025,17.01425 L6.63025,17.01425 Z" id="形状" fill="#000000" fill-rule="nonzero"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 465 B |