void CDIB32::GetRGB(int x, int y, BYTE& r, BYTE& g, BYTE& b)
{
if (x >= Width() || y >= Height())
IERROR;
int off = y * ByteWid() + x * 4;
b = m_pBits[off];
g = m_pBits[off+1];
r = m_pBits[off+2];
}
另外,在我对参数做任何事情之前,这是GetRGB函数:
void CDIB32::SetRGB(int x, int y, BYTE r, BYTE g, BYTE b)
{
//ASSERT(x < Width() && y < Height());
int off = y * ByteWid() + x * 4;
m_pBits[off] = b;
m_pBits[off+1] = g;
m_pBits[off+2] = r;
}
这是SetRGB功能:
SELECT * FROM worker_leave
WHERE YEAR(yearAppplied) = YEAR(DATE_SUB(CURDATE(), INTERVAL 1 YEAR))
OR YEAR(yearAppplied) = YEAR(CURDATE())
用户OzMiz的假设是正确的,即导致错误的行。对于缺乏清晰度表示道歉。而且这个算法确实是你想到的这个精确算法的片段。关于如何做得更好的任何想法都表示赞赏。
答案 0 :(得分:4)
错误消息表明GetRGB
函数期望RGB参数为BYTE&
,即对字节的引用。
因此,您应该相应地声明您的本地r
,g
和b
变量,然后直接将它们传递给函数:
BYTE r, g, b;
scr->GetRGB(mid.x, mid.y, r, g, b);
您的while
循环也已损坏 - 您需要使用&&
或||
加入这三个条件,而不是,
运算符。
答案 1 :(得分:1)
我假设您收到此行的错误:
scr->GetRGB(mid.x, mid.y, (byte)& r, (byte)& g, (byte)& b);
最后三个参数是地址,您尝试将它们转换为值。 我认为这将解决您的错误:
scr->GetRGB(mid.x, mid.y, (byte*)& r, (byte*)& g, (byte*)& b);