将灰度转换为Rgb

问题描述 投票:0回答:1

Here is my full code code-代码的摘录在问题的底部。

我对功能policzkoloruj有问题。我需要将灰度的位图转换为rgb。

有一张表格,显示位图应如何从n(greyscale)转换为rgb(color)。运行以下代码片段显示应如何转换位图:

<table align="center"><tr><b><th align="center">n</th><th align="center">r<sub>n</sub></th><th align="center">g<sub>n</sub></th><th align="center">b<sub>n</sub></th></b></tr><tr><td align="center">0</td><td align="center">0</td><td align="center">0</td><td align="center">0</td></tr><tr><td align="center">1-85</td><td align="center">r<sub>n-1</sub>+3</td><td align="center">0</td><td align="center">0</td></tr><tr><td align="center">86</td><td align="center">255</td><td align="center">0</td><td align="center">0</td></tr><tr><td align="center">87-170</td><td align="center">255</td><td align="center">g<sub>n-1</sub>+3</td><td align="center">0</td></tr><tr><td align="center">171</td><td align="center">255</td><td align="center">255</td><td align="center">0</td></tr><tr><td align="center">172-255</td><td align="center">255</td><td align="center">255</td><td align="center">b<sub>n-1</sub>+3</td></tr></table>

我需要转换的图片:enter image description here

int policz(int i, char rgb, kolor tab[])
{
    int p;
    switch (rgb)
    {
    case 'r':
        p = tab[i-1].R+3;
        if(p>255)
        {
            return 255;
        }
        else return p;
        break;
    case 'g':
        p= tab[i-1].G+3;
        if(p>255)
        {
            return 255;
        }
        else return p;
        break;
    case 'b':
        p= tab[i-1].B+3;;
        if(p>255)
        {
            return 255;
        }
        else return p;
        break;
    }
}
void koloruj(unsigned char tab[], kolor tab_k[], BITMAPINFOHEADER ob)
{
    char rgb;
    for(int i=0; i<ob.biSizeImage/3; i++)
    {



        if(tab[i]==0)
        {
            tab_k[i].R=0;
            tab_k[i].G=0;
            tab_k[i].B=0;

        }
        NULL;
        if(tab[i]>0 && tab[i]<86)
        {
            rgb = 'r';
            tab_k[i].R=policz(i, rgb,tab_k);
            tab_k[i].G=0;
            tab_k[i].B=0;
        }
        NULL;
        if(tab[i]==86)
        {
            tab_k[i].R=255;
            tab_k[i].G=0;
            tab_k[i].B=0;
        }
        NULL;
        if(tab[i]>86 && tab[i]<171)
        {
            rgb = 'b';
            tab_k[i].R=255;
            tab_k[i].G=policz(i, rgb,tab_k);
            tab_k[i].B=0;
        }
        NULL;
        if(tab[i]==171)
        {
            tab_k[i].R=255;
            tab_k[i].G=255;
            tab_k[i].B=0;
        }
        NULL;
        if(tab[i]>171 && tab[i]<256)
        {
            rgb = 'b';
            tab_k[i].R=255;
            tab_k[i].G=255;
            tab_k[i].B=policz(i, rgb, tab_k);
        }
        NULL;
    }
}

我猜这两个函数的代码我都错了,这让我感到紧张

c++ bitmap rgb grayscale
1个回答
0
投票

一切都转移到实际的问题上了>>


0
投票

如果我正确地读取了表,则可以这样重写它:

© www.soinside.com 2019 - 2024. All rights reserved.