87{
88
90 QString suffix = strList.at(0);
91
92
94 QString defaultMime = QString::fromLatin1(
viewManager()->document()->mimeType());
95 if (defaultMime.isEmpty()) defaultMime = QString::fromLatin1(
viewManager()->document()->nativeFormatMimeType());
96 int defaultMimeIndex = 0;
97
98 listMimeFilter.sort();
101 int i = 0;
102 Q_FOREACH (const QString &mimeType, listMimeFilter) {
104 filteredMimeTypes.append(mimeType);
105 if (mimeType == defaultMime) {
106 defaultMimeIndex = i;
107 }
108 i++;
109 }
110
111 listMimeFilter = filteredMimeTypes;
112
113 Q_ASSERT(listMimeFilter.size() == listFileType.size());
114
115 QList <qreal> xGuides =
viewManager()->document()->guidesConfig().verticalGuideLines();
116 QList <qreal> yGuides =
viewManager()->document()->guidesConfig().horizontalGuideLines();
117
118 std::sort(xGuides.begin(), xGuides.end());
119 std::sort(yGuides.begin(), yGuides.end());
120
122 const QTransform documentToImage =
123 QTransform::fromScale(image->
xRes(), image->
yRes());
124
125 for (int i = 0; i< xGuides.size(); i++) {
126 qreal line = xGuides[i];
127 xGuides[i] = documentToImage.map(QPointF(line, line)).x();
128 }
129 for (int i = 0; i< yGuides.size(); i++) {
130 qreal line = yGuides[i];
131 yGuides[i] = documentToImage.map(QPointF(line, line)).y();
132 }
133
134 qreal thumbnailRatio = qreal(200)/qMax(image->
width(), image->
height());
135
137 , suffix
138 , listFileType
139 , defaultMimeIndex
140 ,
viewManager()->document()->generatePreview(QSize(200, 200)).toImage()
141 , yGuides, xGuides, thumbnailRatio);
142 dlgImagesplit->setObjectName("Imagesplit");
143 Q_CHECK_PTR(dlgImagesplit);
144
145 if (dlgImagesplit->exec() == QDialog::Accepted) {
146
149
150 int img_width = image->
width() / (numVerticalLines + 1);
151 int img_height = image->
height() / (numHorizontalLines + 1);
152
154 numHorizontalLines = yGuides.size();
155 }
157 numVerticalLines = xGuides.size();
158 }
159
160
161 bool stop = false;
162
163 QString mimeType;
164 QString filepath;
165 QString homepath;
166 QString suffix;
167
170 dialog.setCaption(i18n(
"Save Image on Split"));
171 dialog.setDefaultDir(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation));
173 QString defaultMime = QString::fromLatin1(
viewManager()->document()->mimeType());
174 dialog.setMimeTypeFilters(mimeFilter, defaultMime);
175
176 QUrl directory = QUrl::fromUserInput(
dialog.filename());
177
178 if (directory.isEmpty())
179 return;
180
181 mimeType = listMimeFilter.at(dlgImagesplit->
cmbIndex);
182 homepath = directory.toLocalFile();
184 if (suffix.startsWith("*.")) {
185 suffix = suffix.remove(0, 1);
186 }
187 if (!suffix.startsWith(".")) {
188 suffix = suffix.prepend('.');
189 }
190 }
191
192 int outerLoop;
193 int innerLoop;
194
196 outerLoop = numHorizontalLines + 1;
197 innerLoop = numVerticalLines + 1;
198 }
199 else {
200 outerLoop = numVerticalLines + 1;
201 innerLoop = numHorizontalLines + 1;
202 }
203
204 xGuides.prepend(qreal(0));
205 xGuides.append(image->
width());
206 yGuides.prepend(qreal(0));
207 yGuides.append(image->
height());
208
209 int currentX = 0;
210 int currentY = 0;
211
212 for (int i = 0, k = 1; i < outerLoop; i++) {
213 for (int j = 0; j < innerLoop; j++, k++) {
214 int row;
215 int column;
217 row = i;
218 column = j;
219 }
220 else {
221 row = j;
222 column = i;
223 }
224
226 currentX = xGuides[column];
227 img_width = xGuides[column+1]-currentX;
228 } else {
229 currentX = (column * img_width);
230 }
232 currentY = yGuides[row];
233 img_height = yGuides[row+1]-currentY;
234 } else {
235 currentY = (row * img_height);
236 }
237
239 QString fileName = dlgImagesplit->
suffix() +
'_' + QString::number(k) + suffix;
240 filepath = homepath + '/' + fileName;
241 mimeType = listMimeFilter.at(dlgImagesplit->
cmbIndex);
242 }
243 else {
245 dialog.setCaption(i18n(
"Save Image on Split"));
246 dialog.setDefaultDir(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation));
247 dialog.setMimeTypeFilters(listMimeFilter, defaultMime);
248
249 QUrl
url = QUrl::fromUserInput(
dialog.filename());
250 filepath =
url.toLocalFile();
251
253
255 return;
256
257 }
258 if (!
saveAsImage(QRect(currentX, currentY, img_width, img_height), mimeType, filepath)) {
259 stop = true;
260 break;
261 }
262
263 }
264 if (stop) {
265 break;
266 }
267 }
268 }
269 delete dlgImagesplit;
270}
bool useHorizontalGuides()
bool saveAsImage(const QRect &imgSize, const QString &mimeType, const QString &url)
static QStringList supportedMimeTypes(Direction direction)
static QStringList suffixesForMimeType(const QString &mimeType)
static QString mimeTypeForFile(const QString &file, bool checkExistingFiles=true)
Find the mimetype for the given filename. The filename must include a suffix.
static QString descriptionForMimeType(const QString &mimeType)
Find the user-readable description for the given mimetype.
QList< KoSubpath * > split(const KoPathShape &path)