1. 程式人生 > 實用技巧 >C++ 實現圖片變灰處理

C++ 實現圖片變灰處理

藉助影象庫stb_image實現讀取、儲存PNG。

stb下載:https://files-cdn.cnblogs.com/files/Kingfans/stb.zip

#include <string>

#define STB_IMAGE_IMPLEMENTATION
#include "stb/stb_image.h"

#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb/stb_image_write.h"

void ColorToGrey(std::string strColorPath, std::string strGreyPath)
{
    
int iWidth, iHeight, iTunnel; unsigned char *data = stbi_load(strColorPath.c_str(), &iWidth, &iHeight, &iTunnel, 0); //change pixel switch (iTunnel) { case 3: { for (int dx = 0; dx < iWidth*iHeight; dx++) { unsigned char
iRed = data[3 * dx]; unsigned char iGreen = data[3 * dx + 1]; unsigned char iBlue = data[3 * dx + 2]; unsigned char iGray = 0.3*iRed + 0.59*iGreen + 0.11*iBlue; data[3 * dx] = iGray; data[3 * dx + 1] = iGray; data[
3 * dx + 2] = iGray; } } break; case 4: { for (int dx = 0; dx < iWidth*iHeight; dx++) { unsigned char iRed = data[4 * dx]; unsigned char iGreen = data[4 * dx + 1]; unsigned char iBlue = data[4 * dx + 2]; unsigned char iAlpha = data[4 * dx + 3]; unsigned char iGray = 0.3*iRed + 0.59*iGreen + 0.11*iBlue; data[4 * dx] = iGray; data[4 * dx + 1] = iGray; data[4 * dx + 2] = iGray; data[4 * dx + 3] = 255; } } break; default: break; } stbi_write_png(strGreyPath.c_str(), iWidth, iHeight, iTunnel, data, iWidth * iTunnel); stbi_image_free(data); } int main() { ColorToGrey("E://1_color.png", "E://1_grey.png"); return 0; }

實現效果: