Portfolio[UWM] Techniki Multimedialne / PIRO

Rozszerzenie zakresu jasności bitmapy.

Zadanie
Zaimplementować funkcję która rozszerza zakres jasności bitmapy.

Obrazu wynikowej bitmapie zakres histogramu zostanie rozszerzony.

ma parametry funkcji:
  • _BitMap źródło obrazka,
BitMap fixLightness(BitMap _BitMap)
{
	// wyszukanie maksymalnej i minimalnej wartości składowej piksela
	int oMax = max_BitMap(_BitMap);
	int oMin = min_BitMap(_BitMap);
	int oTemp;

	// utworzenie kopii bitmapy
	BitMap oNew = _BitMap; 
	oNew.Pixels = Clone(_BitMap);

	// proces przetwarzania 
	for(int y = 0; y < _BitMap.Height; y++)
		for(int x = 0; x < _BitMap.Width; x++)
		{
			Pix oPix = Get_PIX(x,y,_BitMap);
			oPix.Light = ((oTemp = (oPix.Light-oMin)*(255.0/(oMax-oMin))) > 255) ? 255 : (oTemp < 0) ? 0 : oTemp;
			oPix.Red = ((oTemp = (oPix.Red-oMin)*(255.0/(oMax-oMin))) > 255) ? 255 : (oTemp < 0) ? 0 : oTemp;
			oPix.Green = ((oTemp = (oPix.Green-oMin)*(255.0/(oMax-oMin))) > 255) ? 255 : (oTemp < 0) ? 0 : oTemp;
			oPix.Blue = ((oTemp = (oPix.Blue-oMin)*(255.0/(oMax-oMin))) > 255) ? 255 : (oTemp < 0) ? 0 : oTemp;
			Set_PIX(x,y,oPix,oNew);
		}
	return oNew;
}

Funkcja szukająca minimalnej wartości składowej bitmapy.
int min_BitMap(BitMap _BitMap)
{
	int oValue = min(Get_PIX(0,0,_BitMap).Red, min(Get_PIX(0,0,_BitMap).Green,Get_PIX(0,0,_BitMap).Blue));
	if(_BitMap.Bits == 8)
		oValue = Get_PIX(0,0,_BitMap).Light;
	
	for(int y = 0; y < _BitMap.Height; y++)
		for(int x = 0; x < _BitMap.Width; x++)
			if(_BitMap.Bits == 8)
				oValue = min(Get_PIX(0,0,_BitMap).Light, oValue);
			else
				oValue = min(min(Get_PIX(x,y,_BitMap).Red, min(Get_PIX(x,y,_BitMap).Green, Get_PIX(x,y,_BitMap).Blue)), oValue);
	return oValue;
}


Funkcja szukająca maksymalnej wartości składowej bitmapy.
int max_BitMap(BitMap _BitMap)
{
	int oValue = max(Get_PIX(0,0,_BitMap).Red, max(Get_PIX(0,0,_BitMap).Green,Get_PIX(0,0,_BitMap).Blue));
	if(_BitMap.Bits == 8)
		oValue = Get_PIX(0,0,_BitMap).Light;
	
	for(int y = 0; y < _BitMap.Height; y++)
		for(int x = 0; x < _BitMap.Width; x++)
			if(_BitMap.Bits == 8)
				oValue = max(Get_PIX(0,0,_BitMap).Light, oValue);
			else
				oValue = max(max(Get_PIX(x,y,_BitMap).Red, max(Get_PIX(x,y,_BitMap).Green, Get_PIX(x,y,_BitMap).Blue)), oValue);
	return oValue;
}

  • Administracja