File indexing completed on 2025-04-27 03:58:08
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2006-01-20 0007 * Description : image file IO threaded interface. 0008 * 0009 * SPDX-FileCopyrightText: 2005-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de> 0010 * SPDX-FileCopyrightText: 2005-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0011 * 0012 * SPDX-License-Identifier: GPL-2.0-or-later 0013 * 0014 * ============================================================ */ 0015 0016 #include "previewloadthread.h" 0017 0018 // Local includes 0019 0020 #include "iccmanager.h" 0021 #include "previewtask.h" 0022 0023 namespace Digikam 0024 { 0025 0026 PreviewLoadThread::PreviewLoadThread(QObject* const parent) 0027 : ManagedLoadSaveThread(parent), 0028 m_displayingWidget (nullptr) 0029 { 0030 m_loadingPolicy = LoadingPolicyFirstRemovePrevious; 0031 } 0032 0033 PreviewLoadThread::~PreviewLoadThread() 0034 { 0035 } 0036 0037 LoadingDescription PreviewLoadThread::createLoadingDescription(const QString& filePath, const PreviewSettings& settings, int size) 0038 { 0039 return createLoadingDescription(filePath, settings, size, IccManager::displayProfile(m_displayingWidget)); 0040 } 0041 0042 LoadingDescription PreviewLoadThread::createLoadingDescription(const QString& filePath, 0043 const PreviewSettings& previewSettings, 0044 int size, 0045 const IccProfile& displayProfile) 0046 { 0047 LoadingDescription description(filePath, previewSettings, size); 0048 0049 if (DImg::fileFormat(filePath) == DImg::RAW) 0050 { 0051 description.rawDecodingSettings.optimizeTimeLoading(); 0052 description.rawDecodingSettings.rawPrm.sixteenBitsImage = false; 0053 description.rawDecodingSettings.rawPrm.halfSizeColorImage = true; 0054 description.rawDecodingHint = LoadingDescription::RawDecodingTimeOptimized; 0055 } 0056 0057 ICCSettingsContainer settings = IccSettings::instance()->settings(); 0058 0059 if (settings.enableCM && settings.useManagedPreviews) 0060 { 0061 description.postProcessingParameters.colorManagement = LoadingDescription::ConvertForDisplay; 0062 0063 if (displayProfile.isNull()) 0064 { 0065 description.postProcessingParameters.setProfile(IccProfile::sRGB()); 0066 } 0067 else 0068 { 0069 description.postProcessingParameters.setProfile(displayProfile); 0070 } 0071 } 0072 0073 return description; 0074 } 0075 0076 void PreviewLoadThread::loadFast(const QString& filePath, int size) 0077 { 0078 PreviewSettings settings(PreviewSettings::FastPreview); 0079 load(createLoadingDescription(filePath, settings, size)); 0080 } 0081 0082 void PreviewLoadThread::loadFastButLarge(const QString& filePath, int size) 0083 { 0084 PreviewSettings settings(PreviewSettings::FastButLargePreview); 0085 load(createLoadingDescription(filePath, settings, size)); 0086 } 0087 0088 void PreviewLoadThread::loadHighQuality(const QString& filePath, PreviewSettings::RawLoading rawLoadingMode) 0089 { 0090 PreviewSettings settings(PreviewSettings::HighQualityPreview, rawLoadingMode); 0091 load(createLoadingDescription(filePath, settings, 0)); 0092 } 0093 0094 void PreviewLoadThread::load(const QString& filePath, const PreviewSettings& settings, int size) 0095 { 0096 load(createLoadingDescription(filePath, settings, size)); 0097 } 0098 0099 void PreviewLoadThread::load(const LoadingDescription& description) 0100 { 0101 // creates a PreviewLoadingTask, which uses different mechanisms than a normal loading task 0102 0103 ManagedLoadSaveThread::loadPreview(description, m_loadingPolicy); 0104 } 0105 0106 void PreviewLoadThread::setDisplayingWidget(QWidget* const widget) 0107 { 0108 m_displayingWidget = widget; 0109 } 0110 0111 DImg PreviewLoadThread::loadFastSynchronously(const QString& filePath, int size, const IccProfile& profile) 0112 { 0113 PreviewSettings settings(PreviewSettings::FastPreview); 0114 0115 return loadSynchronously(createLoadingDescription(filePath, settings, size, profile)); 0116 } 0117 0118 DImg PreviewLoadThread::loadFastButLargeSynchronously(const QString& filePath, int minimumSize, const IccProfile& profile) 0119 { 0120 PreviewSettings settings(PreviewSettings::FastButLargePreview); 0121 0122 return loadSynchronously(createLoadingDescription(filePath, settings, minimumSize, profile)); 0123 } 0124 0125 DImg PreviewLoadThread::loadHighQualitySynchronously(const QString& filePath, 0126 PreviewSettings::RawLoading rawLoadingMode, 0127 const IccProfile& profile) 0128 { 0129 PreviewSettings settings(PreviewSettings::HighQualityPreview, rawLoadingMode); 0130 0131 return loadSynchronously(createLoadingDescription(filePath, settings, 0, profile)); 0132 } 0133 0134 DImg PreviewLoadThread::loadSynchronously(const QString& filePath, const PreviewSettings& previewSettings, int size, const IccProfile& profile) 0135 { 0136 return loadSynchronously(createLoadingDescription(filePath, previewSettings, size, profile)); 0137 } 0138 0139 DImg PreviewLoadThread::loadSynchronously(const LoadingDescription& description) 0140 { 0141 PreviewLoadingTask task(nullptr, description); 0142 task.execute(); 0143 0144 return task.img(); 0145 } 0146 0147 } // namespace Digikam 0148 0149 #include "moc_previewloadthread.cpp"