200
200
grid3->addMultiCellWidget(m_matrixSize, 9, 9, 0, 1);
201
201
grid3->setRowStretch(10, 10);
202
202
m_stack->addWidget(refocusSettings, Refocus);
204
204
m_imagePreviewWidget->setUserAreaWidget(gboxSettings);
206
206
// -------------------------------------------------------------
208
connect(m_radiusInput, SIGNAL(valueChanged (int)),
209
this, SLOT(slotTimer()));
211
connect(m_radiusInput2, SIGNAL(valueChanged (int)),
212
this, SLOT(slotTimer()));
214
connect(m_amountInput, SIGNAL(valueChanged (double)),
215
this, SLOT(slotTimer()));
217
connect(m_thresholdInput, SIGNAL(valueChanged (double)),
218
this, SLOT(slotTimer()));
220
connect(m_matrixSize, SIGNAL(valueChanged(int)),
221
this, SLOT(slotTimer()));
223
connect(m_radius, SIGNAL(valueChanged(double)),
224
this, SLOT(slotTimer()));
226
connect(m_gauss, SIGNAL(valueChanged(double)),
227
this, SLOT(slotTimer()));
229
connect(m_correlation, SIGNAL(valueChanged(double)),
230
this, SLOT(slotTimer()));
232
connect(m_noise, SIGNAL(valueChanged(double)),
233
this, SLOT(slotTimer()));
235
208
connect(m_sharpMethod, SIGNAL(activated(int)),
236
209
this, SLOT(slotSharpMethodActived(int)));
238
211
// -------------------------------------------------------------
240
// Image creation with dummy borders (mosaic mode) used by Refocus method. It needs to do
241
// it before to apply deconvolution filter on original image border pixels including
213
// Image creation with dummy borders (mosaic mode) used by Refocus method. It needs to do
214
// it before to apply deconvolution filter on original image border pixels including
242
215
// on matrix size area. This way limit artifacts on image border.
244
217
Digikam::ImageIface iface(0, 0);
246
219
uchar* data = iface.getOriginalImage();
247
220
int w = iface.originalWidth();
248
221
int h = iface.originalHeight();
249
222
bool sb = iface.originalSixteenBit();
250
223
bool a = iface.originalHasAlpha();
252
225
m_img = Digikam::DImg( w + 4*MAX_MATRIX_SIZE, h + 4*MAX_MATRIX_SIZE, sb, a);
254
227
Digikam::DImg tmp;
255
228
Digikam::DImg org(w, h, sb, a, data);
257
230
// Copy original.
258
231
m_img.bitBltImage(&org, 2*MAX_MATRIX_SIZE, 2*MAX_MATRIX_SIZE);
260
233
// Create dummy top border
261
234
tmp = org.copy(0, 0, w, 2*MAX_MATRIX_SIZE);
262
235
tmp.flip(Digikam::DImg::VERTICAL);
418
389
switch (m_stack->id(m_stack->visibleWidget()))
422
m_radiusInput->blockSignals(true);
423
m_radiusInput->setValue(0);
424
m_radiusInput->blockSignals(false);
430
m_radiusInput2->blockSignals(true);
431
m_amountInput->blockSignals(true);
432
m_thresholdInput->blockSignals(true);
433
m_radiusInput2->setValue(1);
434
m_amountInput->setValue(1.0);
435
m_thresholdInput->setValue(0.05);
436
m_radiusInput2->blockSignals(false);
437
m_amountInput->blockSignals(false);
438
m_thresholdInput->blockSignals(false);
444
m_matrixSize->blockSignals(true);
445
m_radius->blockSignals(true);
446
m_gauss->blockSignals(true);
447
m_correlation->blockSignals(true);
448
m_noise->blockSignals(true);
449
m_matrixSize->setValue(5);
450
m_radius->setValue(1.0);
451
m_gauss->setValue(0.0);
452
m_correlation->setValue(0.5);
453
m_noise->setValue(0.03);
454
m_matrixSize->blockSignals(false);
455
m_radius->blockSignals(false);
456
m_gauss->blockSignals(false);
457
m_correlation->blockSignals(false);
458
m_noise->blockSignals(false);
393
m_radiusInput->blockSignals(true);
394
m_radiusInput->setValue(0);
395
m_radiusInput->blockSignals(false);
401
m_radiusInput2->blockSignals(true);
402
m_amountInput->blockSignals(true);
403
m_thresholdInput->blockSignals(true);
404
m_radiusInput2->setValue(1);
405
m_amountInput->setValue(1.0);
406
m_thresholdInput->setValue(0.05);
407
m_radiusInput2->blockSignals(false);
408
m_amountInput->blockSignals(false);
409
m_thresholdInput->blockSignals(false);
415
m_matrixSize->blockSignals(true);
416
m_radius->blockSignals(true);
417
m_gauss->blockSignals(true);
418
m_correlation->blockSignals(true);
419
m_noise->blockSignals(true);
420
m_matrixSize->setValue(5);
421
m_radius->setValue(1.0);
422
m_gauss->setValue(0.0);
423
m_correlation->setValue(0.5);
424
m_noise->setValue(0.03);
425
m_matrixSize->blockSignals(false);
426
m_radius->blockSignals(false);
427
m_gauss->blockSignals(false);
428
m_correlation->blockSignals(false);
429
m_noise->blockSignals(false);
464
435
void ImageEffect_Sharpen::prepareEffect()
466
437
switch (m_stack->id(m_stack->visibleWidget()))
470
m_radiusInput->setEnabled(false);
472
Digikam::DImg img = m_imagePreviewWidget->getOriginalRegionImage();
474
double radius = m_radiusInput->value()/10.0;
477
if (radius < 1.0) sigma = radius;
478
else sigma = sqrt(radius);
480
m_threadedFilter = dynamic_cast<Digikam::DImgThreadedFilter *>
481
(new Digikam::DImgSharpen(&img, this, radius, sigma ));
487
m_radiusInput2->setEnabled(false);
488
m_amountInput->setEnabled(false);
489
m_thresholdInput->setEnabled(false);
491
Digikam::DImg img = m_imagePreviewWidget->getOriginalRegionImage();
493
int r = m_radiusInput2->value();
494
double a = m_amountInput->value();
495
double th = m_thresholdInput->value();
497
m_threadedFilter = dynamic_cast<Digikam::DImgThreadedFilter *>
498
(new DigikamImagesPluginCore::UnsharpMask(&img, this, r, a, th));
504
m_matrixSize->setEnabled(false);
505
m_radius->setEnabled(false);
506
m_gauss->setEnabled(false);
507
m_correlation->setEnabled(false);
508
m_noise->setEnabled(false);
510
int ms = m_matrixSize->value();
511
double r = m_radius->value();
512
double g = m_gauss->value();
513
double c = m_correlation->value();
514
double n = m_noise->value();
516
QRect area = m_imagePreviewWidget->getOriginalImageRegionToRender();
518
tmpRect.setLeft(area.left()-2*ms);
519
tmpRect.setRight(area.right()+2*ms);
520
tmpRect.setTop(area.top()-2*ms);
521
tmpRect.setBottom(area.bottom()+2*ms);
522
tmpRect.moveBy(2*MAX_MATRIX_SIZE, 2*MAX_MATRIX_SIZE);
523
Digikam::DImg imTemp = m_img.copy(tmpRect);
525
m_threadedFilter = dynamic_cast<Digikam::DImgThreadedFilter *>
526
(new DigikamImagesPluginCore::Refocus(&imTemp, this, ms, r, g, c, n));
441
m_radiusInput->setEnabled(false);
443
Digikam::DImg img = m_imagePreviewWidget->getOriginalRegionImage();
445
double radius = m_radiusInput->value()/10.0;
448
if (radius < 1.0) sigma = radius;
449
else sigma = sqrt(radius);
451
m_threadedFilter = dynamic_cast<Digikam::DImgThreadedFilter *>
452
(new Digikam::DImgSharpen(&img, this, radius, sigma ));
458
m_radiusInput2->setEnabled(false);
459
m_amountInput->setEnabled(false);
460
m_thresholdInput->setEnabled(false);
462
Digikam::DImg img = m_imagePreviewWidget->getOriginalRegionImage();
464
int r = m_radiusInput2->value();
465
double a = m_amountInput->value();
466
double th = m_thresholdInput->value();
468
m_threadedFilter = dynamic_cast<Digikam::DImgThreadedFilter *>
469
(new DigikamImagesPluginCore::UnsharpMask(&img, this, r, a, th));
475
m_matrixSize->setEnabled(false);
476
m_radius->setEnabled(false);
477
m_gauss->setEnabled(false);
478
m_correlation->setEnabled(false);
479
m_noise->setEnabled(false);
481
int ms = m_matrixSize->value();
482
double r = m_radius->value();
483
double g = m_gauss->value();
484
double c = m_correlation->value();
485
double n = m_noise->value();
487
QRect area = m_imagePreviewWidget->getOriginalImageRegionToRender();
489
tmpRect.setLeft(area.left()-2*ms);
490
tmpRect.setRight(area.right()+2*ms);
491
tmpRect.setTop(area.top()-2*ms);
492
tmpRect.setBottom(area.bottom()+2*ms);
493
tmpRect.moveBy(2*MAX_MATRIX_SIZE, 2*MAX_MATRIX_SIZE);
494
Digikam::DImg imTemp = m_img.copy(tmpRect);
496
m_threadedFilter = dynamic_cast<Digikam::DImgThreadedFilter *>
497
(new DigikamImagesPluginCore::Refocus(&imTemp, this, ms, r, g, c, n));
532
503
void ImageEffect_Sharpen::prepareFinal()
534
505
switch (m_stack->id(m_stack->visibleWidget()))
538
m_radiusInput->setEnabled(false);
540
double radius = m_radiusInput->value()/10.0;
543
if (radius < 1.0) sigma = radius;
544
else sigma = sqrt(radius);
546
Digikam::ImageIface iface(0, 0);
547
uchar *data = iface.getOriginalImage();
548
int w = iface.originalWidth();
549
int h = iface.originalHeight();
550
bool sixteenBit = iface.originalSixteenBit();
551
bool hasAlpha = iface.originalHasAlpha();
552
Digikam::DImg orgImage = Digikam::DImg(w, h, sixteenBit, hasAlpha ,data);
554
m_threadedFilter = dynamic_cast<Digikam::DImgThreadedFilter *>
555
(new Digikam::DImgSharpen(&orgImage, this, radius, sigma ));
561
m_radiusInput2->setEnabled(false);
562
m_amountInput->setEnabled(false);
563
m_thresholdInput->setEnabled(false);
565
int r = m_radiusInput2->value();
566
double a = m_amountInput->value();
567
double th = m_thresholdInput->value();
569
Digikam::ImageIface iface(0, 0);
570
uchar *data = iface.getOriginalImage();
571
int w = iface.originalWidth();
572
int h = iface.originalHeight();
573
bool sixteenBit = iface.originalSixteenBit();
574
bool hasAlpha = iface.originalHasAlpha();
575
Digikam::DImg orgImage = Digikam::DImg(w, h, sixteenBit, hasAlpha ,data);
577
m_threadedFilter = dynamic_cast<Digikam::DImgThreadedFilter *>
578
(new DigikamImagesPluginCore::UnsharpMask(&orgImage, this, r, a, th));
585
m_matrixSize->setEnabled(false);
586
m_radius->setEnabled(false);
587
m_gauss->setEnabled(false);
588
m_correlation->setEnabled(false);
589
m_noise->setEnabled(false);
591
int ms = m_matrixSize->value();
592
double r = m_radius->value();
593
double g = m_gauss->value();
594
double c = m_correlation->value();
595
double n = m_noise->value();
597
m_threadedFilter = dynamic_cast<Digikam::DImgThreadedFilter *>
598
(new DigikamImagesPluginCore::Refocus(&m_img, this, ms, r, g, c, n));
509
m_radiusInput->setEnabled(false);
511
double radius = m_radiusInput->value()/10.0;
514
if (radius < 1.0) sigma = radius;
515
else sigma = sqrt(radius);
517
Digikam::ImageIface iface(0, 0);
518
uchar *data = iface.getOriginalImage();
519
int w = iface.originalWidth();
520
int h = iface.originalHeight();
521
bool sixteenBit = iface.originalSixteenBit();
522
bool hasAlpha = iface.originalHasAlpha();
523
Digikam::DImg orgImage = Digikam::DImg(w, h, sixteenBit, hasAlpha ,data);
525
m_threadedFilter = dynamic_cast<Digikam::DImgThreadedFilter *>
526
(new Digikam::DImgSharpen(&orgImage, this, radius, sigma ));
532
m_radiusInput2->setEnabled(false);
533
m_amountInput->setEnabled(false);
534
m_thresholdInput->setEnabled(false);
536
int r = m_radiusInput2->value();
537
double a = m_amountInput->value();
538
double th = m_thresholdInput->value();
540
Digikam::ImageIface iface(0, 0);
541
uchar *data = iface.getOriginalImage();
542
int w = iface.originalWidth();
543
int h = iface.originalHeight();
544
bool sixteenBit = iface.originalSixteenBit();
545
bool hasAlpha = iface.originalHasAlpha();
546
Digikam::DImg orgImage = Digikam::DImg(w, h, sixteenBit, hasAlpha ,data);
548
m_threadedFilter = dynamic_cast<Digikam::DImgThreadedFilter *>
549
(new DigikamImagesPluginCore::UnsharpMask(&orgImage, this, r, a, th));
556
m_matrixSize->setEnabled(false);
557
m_radius->setEnabled(false);
558
m_gauss->setEnabled(false);
559
m_correlation->setEnabled(false);
560
m_noise->setEnabled(false);
562
int ms = m_matrixSize->value();
563
double r = m_radius->value();
564
double g = m_gauss->value();
565
double c = m_correlation->value();
566
double n = m_noise->value();
568
m_threadedFilter = dynamic_cast<Digikam::DImgThreadedFilter *>
569
(new DigikamImagesPluginCore::Refocus(&m_img, this, ms, r, g, c, n));
604
575
void ImageEffect_Sharpen::putPreviewData(void)
606
577
switch (m_stack->id(m_stack->visibleWidget()))
611
Digikam::DImg imDest = m_threadedFilter->getTargetImage();
612
m_imagePreviewWidget->setPreviewImage(imDest);
618
int ms = m_matrixSize->value();
619
QRect area = m_imagePreviewWidget->getOriginalImageRegionToRender();
621
Digikam::DImg imDest = m_threadedFilter->getTargetImage()
622
.copy(2*ms, 2*ms, area.width(), area.height());
623
m_imagePreviewWidget->setPreviewImage(imDest);
582
Digikam::DImg imDest = m_threadedFilter->getTargetImage();
583
m_imagePreviewWidget->setPreviewImage(imDest);
589
int ms = m_matrixSize->value();
590
QRect area = m_imagePreviewWidget->getOriginalImageRegionToRender();
592
Digikam::DImg imDest = m_threadedFilter->getTargetImage()
593
.copy(2*ms, 2*ms, area.width(), area.height());
594
m_imagePreviewWidget->setPreviewImage(imDest);