From 74dd69a11304fad55ecad71135743d08d9dca2fe Mon Sep 17 00:00:00 2001 From: Matthew Date: Sun, 23 Mar 2025 11:55:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E4=BA=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/vulkan_hdr_generator.cpp | 32 ++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/app/src/main/cpp/vulkan_hdr_generator.cpp b/app/src/main/cpp/vulkan_hdr_generator.cpp index 309de4f..0730f84 100644 --- a/app/src/main/cpp/vulkan_hdr_generator.cpp +++ b/app/src/main/cpp/vulkan_hdr_generator.cpp @@ -495,6 +495,28 @@ void VulkanHdrGenerator::processImageBatch( vkUnmapMemory(device, outputBufferMemory); } +// Add this function to VulkanHdrGenerator.cpp, just before the generateHdr method +void boostBrightness(std::vector& imageData, float boost = 10.0f) { + if (imageData.empty()) return; + + // Find current average brightness + float totalLum = 0.0f; + for (size_t i = 0; i < imageData.size(); i += 3) { + float r = imageData[i]; + float g = imageData[i+1]; + float b = imageData[i+2]; + float lum = 0.2126f * r + 0.7152f * g + 0.0722f * b; + totalLum += lum; + } + float avgLum = totalLum / (imageData.size() / 3); + ALOGI("Original average luminance: %.4f", avgLum); + + // Simple linear scaling without tone mapping + for (size_t i = 0; i < imageData.size(); ++i) { + imageData[i] *= boost; + } +} + bool VulkanHdrGenerator::generateHdr( const std::vector& bmpFiles, const std::string& outputFile, @@ -567,8 +589,16 @@ bool VulkanHdrGenerator::generateHdr( } + // After all tiles are processed and before writing: + ALOGI("Applying brightness boost to final HDR image"); + boostBrightness(outputHdrData, 30.0f); // Try a large value like 10.0 + // Write output HDR - return HdrWriter::writeRGB(outputFile, outputHdrData, (int)imageWidth, (int)imageHeight, HdrWriter::Format::BMP); + bool res = HdrWriter::writeRGB(outputFile, outputHdrData, (int)imageWidth, (int)imageHeight, HdrWriter::Format::BMP); + + ALOGI("BMP saved"); + + return res; } uint32_t VulkanHdrGenerator::findComputeQueueFamily(VkPhysicalDevice device) {