[英]Changing RBG value doesn't seem to work in C
我應該通過獲取 3 的平均值然后將該平均值分配給每種 RBG 顏色(紅色、藍色、綠色)來將 RGB 顏色更改為灰色,但它不起作用。
首先,我將發布我的灰度部分代碼:
#include "helpers.h"
// Convert image to grayscale
void grayscale(int height, int width, RGBTRIPLE image[height][width])
{
for(int i = 0; i < height; i++)
{
for(int j = 0; j < width; j++)
{
RGBTRIPLE rgbt = image[i][j];
BYTE average = (rgbt.rgbtBlue/3)+(rgbt.rgbtGreen/3)+(rgbt.rgbtRed);
*rgbt.rgbtBlue = *average;
*rgbt.rgbtGreen = *average;
*rgbt.rgbtRed = *average;
}
}
return;
}
由於它很重要,這里提到了 RGBT 值:(在另一個文件中,在 helpers.h 的 header 中提到,稱為 bmp.h):
/**
* RGBTRIPLE
*
* This structure describes a color consisting of relative intensities of
* red, green, and blue.
*
* Adapted from http://msdn.microsoft.com/en-us/library/aa922590.aspx.
*/
typedef struct
{
BYTE rgbtBlue;
BYTE rgbtGreen;
BYTE rgbtRed;
} __attribute__((__packed__))
RGBTRIPLE;
錯誤信息如下:
間接需要指針操作數(“int”無效)
感謝您的幫助(我知道 cs50 不是最好的課程,但哈佛文憑會有所幫助。)。
我想你想要這個:
void grayscale(int height, int width, RGBTRIPLE image[height][width])
{
for(int i = 0; i < height; i++)
{
for(int j = 0; j < width; j++)
{
RGBTRIPLE rgbt = image[i][j];
BYTE average = (rgbt.rgbtBlue + rgbt.rgbtGreen + rgbt.rgbtRed) / 3;
rgbt.rgbtBlue = average;
rgbt.rgbtGreen = average;
rgbt.rgbtRed = average;
image[i][j] = rgbt;
}
}
return;
}
提示:您可以通過刪除rgbt
變量來簡單地解決這個問題。 您只需要在內層 for 循環中的一行代碼。
原始代碼中的問題:
這是錯誤的:
BYTE average = (rgbt.rgbtBlue/3)+(rgbt.rgbtGreen/3)+(rgbt.rgbtRed);
因為您沒有將rgbt.rgbtRed
除以 3,無論如何您應該先將所有值相加,然后將整個值除以 3,這樣可以防止舍入錯誤:
BYTE average = (rgbt.rgbtBlue + rgbt.rgbtGreen + rgbt.rgbtRed) / 3;
這是錯誤的,您使用*
取消引用不是指針的內容:
*rgbt.rgbtBlue = *average;
你只是想要:
rgbt.rgbtBlue = average;
最后但同樣重要的是,您仍然需要通過添加以下內容來修改圖像中的原始值:
image[i][j] = rgbt;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.