怎么提高图片的亮度?

0

我是想逐个像素修改,获取像素BGR,再转为HSV,调整V,再转回BGR。

问题出在我不会用BGRtoHSV()这个函数,或者是我编写的代码有问题。

能否有大神帮我看看,真的非常感谢!

void  Color_test(IMAGE* pimg)
{
	DWORD* p = GetImageBuffer(pimg);	// 获取显示缓冲区指针
	COLORREF c;
	float* h;
	float* s;
	float* v;
	for (int i = pimg->getwidth() * pimg->getheight() - 1; i >= 0; i--)
	{
		c = BGR(p[i]);

		RGBtoHSV(c,h,s,v);

		p[i] = HSVtoRGB(*h, *s, *v + 0.3);
	}
}
ava
Link

2021-1-25

1

你的指针的使用有问题。

float* h,定义了一个指针,但是这个指针并没有指向有效的内存,导致后面的所有操作都是有问题的。

例如,可以修改为:

void  Color_test(IMAGE* pimg)
{
	DWORD* p = GetImageBuffer(pimg);	// 获取显示缓冲区指针
	COLORREF c;
	float h;
	float s;
	float v;
	for (int i = pimg->getwidth() * pimg->getheight() - 1; i >= 0; i--)
	{
		c = BGR(p[i]);

		RGBtoHSV(c, &h, &s, &v);

		p[i] = HSVtoRGB(h, s, v + 0.3);
	}
}
ava
慢羊羊

2021-1-25

啊,我C不是很懂特别是指针。那这个指针要指向哪里呀 - Link 2021-1-26
@Link 指向有效的存储位置,而你目前哪里都没指向,就是个“野指针”,不一定会破坏哪里的内存数据。 - 慢羊羊 2021-1-26
@慢羊羊 好的,非常感谢。 - Link 2021-1-26
技术讨论社区