当前位置: 首页>>代码示例>>C++>>正文


C++ Image32::pixel方法代码示例

本文整理汇总了C++中Image32::pixel方法的典型用法代码示例。如果您正苦于以下问题:C++ Image32::pixel方法的具体用法?C++ Image32::pixel怎么用?C++ Image32::pixel使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Image32的用法示例。


在下文中一共展示了Image32::pixel方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: int

int Image32::Quantize(const int& bits,Image32& outputImage) const
{
	int height = this->height();
	int width = this->width();
	outputImage.setSize(width, height);

	for(int y=0; y<height; ++y){
		for(int x=0; x<width; ++x){
			int r = this->pixel(x,y).r;
			int g = this->pixel(x,y).g;
			int b = this->pixel(x,y).b;

			int multiple = int(pow(2,8-bits)); 

			int quanR = r + multiple/2;
			quanR = min(255, quanR - (quanR % multiple)); // clamped to 255

			int quanG = g + multiple/2;
			quanG = min(255, quanG - (quanG % multiple)); // clamped to 255

			int quanB = b + multiple/2;
			quanB = min(255, quanB - (quanB % multiple)); // clamped to 255
			
			outputImage.pixel(x,y).r = quanR;
			outputImage.pixel(x,y).g = quanG;
			outputImage.pixel(x,y).b = quanB;
			outputImage.pixel(x,y).a = this->pixel(x,y).a;
		}
	}
	return 1;
}
开发者ID:jnayak1,项目名称:CS-4810,代码行数:31,代码来源:image.todo.cpp

示例2:

int Image32::Warp(const OrientedLineSegmentPairs& olsp,Image32& outputImage) const
{
	int height = this->height();
	int width = this->width();
	outputImage.setSize(width,height);

	int numOfLineSegments = olsp.count;

	float dSumX, dSumY, weight, weightSum;
	cout << "warp" << "\n";
	for(int y=0; y<height; ++y){
		for(int x=0; x<width; ++x){
			for(int i=0; i<numOfLineSegments; ++i){
				dSumX = 0, dSumY = 0, weightSum = 0;
				weight = olsp.segments2[i].getWeight(x,y);
				weightSum += weight;

				float sourceX, sourceY;

				olsp.segments1[i].GetSourcePosition(olsp.segments1[i], olsp.segments2[i], x, y, sourceX, sourceY);

				dSumX += (sourceX - x) * weight;
				dSumY += (sourceY - y) * weight;
			}
			
			 
			outputImage.pixel(x,y).r = this->pixel(x + (dSumX/weightSum), y + (dSumY/weightSum)).r;
			outputImage.pixel(x,y).g = this->pixel(x + (dSumX/weightSum), y + (dSumY/weightSum)).g;
			outputImage.pixel(x,y).b = this->pixel(x + (dSumX/weightSum), y + (dSumY/weightSum)).b;
		}
	}
	return 1;
}
开发者ID:jnayak1,项目名称:CS-4810,代码行数:33,代码来源:image.todo.cpp

示例3: sqrt

int Image32::FunFilter(Image32& outputImage) const
{
	double height = this->height();
	double width = this->width();

	for(int y=0; y<height; ++y){
		for(int x=0; x<width; ++x){
				double y1 =  (double) y /  (double) (height-1.0);
				double x1 = (double) x / (double) (width-1.0);
				double r = sqrt( pow(x1 - 0.5, 2.0) + pow(y1 - 0.5, 2.0) );

				double a = atan2((y1 - 0.5) , (x1 - 0.5));
				
				double rd = pow(r, 2.5)/.5;

				float xNew = ((rd*cos(a)) + 0.5) * (width-1);
				float yNew = ((rd*sin(a)) + 0.5) * (height-1);

				Pixel32 pix = this->NearestSample(xNew,yNew);

				outputImage.pixel(x,y).r = pix.r;
				outputImage.pixel(x,y).g = pix.g;
				outputImage.pixel(x,y).b = pix.b;
		}
	}

	return 1;
}
开发者ID:jnayak1,项目名称:CS-4810,代码行数:28,代码来源:image.todo.cpp

示例4:

/*
 *	scales each pixel's rgb by the brightness factor to increase brightness
 */
int Image32::Brighten(const float& brightness,Image32& outputImage) const
{
	int r1, g1, b1;
    for (int x = 0; x < outputImage.width(); x++)
		for (int y = 0; y < outputImage.height(); y++)
		{	
			// clamp [0,255]
			r1 = (int)(pixel(x,y).r*brightness);
			if (r1 > 255)
				r1 = 255;
			if (r1 < 0)
				r1 = 0;
			g1 = (int)(pixel(x,y).g*brightness);
			if (g1 > 255)
				g1 = 255;
			if (g1 < 0)
				g1 = 0;
			b1 = (int)(pixel(x,y).b*brightness);
			if (b1 > 255)
				b1 = 255;
			if (b1 < 0)
				b1 = 0;

			// write clamped values to outputImage
			outputImage.pixel(x,y).r = r1;
			outputImage.pixel(x,y).g = g1;
			outputImage.pixel(x,y).b = b1;
		}
    return 1;
}
开发者ID:rjdean123,项目名称:AssignmentOne,代码行数:33,代码来源:image.todo.cpp

示例5: fabs

int Image32::Contrast(const float& contrast,Image32& outputImage) const
{
	int height = this->height();
	int width = this->width();
	outputImage.setSize(width, height);

	float totalLum = 0.0;
	int numPixels = 0;

	for(int y=0; y<height; ++y){
		for(int x=0; x<width; ++x){
			int r = this->pixel(x,y).r;
			int g = this->pixel(x,y).g;
			int b = this->pixel(x,y).b;
			float l = 0.30*r + 0.59*g + 0.11*b;
			totalLum += l;
			numPixels += 1;
		}
	}	
	float meanLum = totalLum / numPixels;

	for(int y=0; y<height; ++y){
		for(int x=0; x<width; ++x){
			int r = this->pixel(x,y).r;
			int g = this->pixel(x,y).g;
			int b = this->pixel(x,y).b;
			int a = this->pixel(x,y).a;

			float l = 0.30*r + 0.59*g + 0.11*b;
			float lDiff = l - meanLum;

			float maxContrast;
			if(lDiff >= 0){ 
				maxContrast = (255 - (max(r,max(g,b)) - lDiff)) / lDiff;
			}
			else{
				maxContrast = fabs(((min(r,min(g,b))) - lDiff) / lDiff); // lDiff is negative, so adding to minimum of r,g,b
			} 

			float contrastClamped = min(maxContrast,contrast);

			outputImage.pixel(x,y).r = contrastClamped*lDiff + (r-lDiff);
			outputImage.pixel(x,y).g = contrastClamped*lDiff + (g-lDiff);
			outputImage.pixel(x,y).b = contrastClamped*lDiff + (b-lDiff);
			outputImage.pixel(x,y).a = a;
		}
	}	
	return 1;
}
开发者ID:jnayak1,项目名称:CS-4810,代码行数:49,代码来源:image.todo.cpp

示例6: max

int Image32::AddRandomNoise(const float& noise,Image32& outputImage) const
{
	int height = this->height();
	int width = this->width();
	outputImage.setSize(width, height);
	int noiseRange = (noise * 256) * 2;
	
	for(int y=0; y<height; ++y){
		for(int x=0; x<width; ++x){
			int randNum;
			if(noiseRange != 0) randNum = (rand() % noiseRange) - (.5*noiseRange);
			else{ randNum = 0; }
			outputImage.pixel(x,y).r = max(0,min(255,randNum + this->pixel(x,y).r));
			outputImage.pixel(x,y).g = max(0,min(255,randNum + this->pixel(x,y).g));
			outputImage.pixel(x,y).b = max(0,min(255,randNum + this->pixel(x,y).b));
			outputImage.pixel(x,y).a = this->pixel(x,y).a;
		}	
	}
	return 1;	
}
开发者ID:jnayak1,项目名称:CS-4810,代码行数:20,代码来源:image.todo.cpp

示例7: min

int Image32::Saturate(const float& saturation,Image32& outputImage) const
{
	int height = this->height();
	int width = this->width();
	outputImage.setSize(width, height);

	for(int y=0; y<height; ++y){
		for(int x=0; x<width; ++x){
			int r = this->pixel(x,y).r;
			int g = this->pixel(x,y).g;
			int b = this->pixel(x,y).b;

			float l = 0.30*r + 0.59*g + 0.11*b;

			float rDiff = r-l;
			float gDiff = g-l;
			float bDiff = b-l;

			bool rOverflow = (r-rDiff) + rDiff*saturation > 255 || (r-rDiff) + rDiff*saturation < 0;
			bool gOverflow = (g-gDiff) + gDiff*saturation > 255 || (g-gDiff) + gDiff*saturation < 0;
			bool bOverflow = (b-bDiff) + bDiff*saturation > 255 || (b-bDiff) + bDiff*saturation < 0;

			float satClamped = saturation; // if no overflows, satClamped is saturation
			if(rOverflow){ // if r overflows, clamp sat to max so r doesn't overflow
				satClamped = min((r-rDiff), 255-(r-rDiff)) / rDiff;
			}
			if(gOverflow){ // if g overflows, clamp sat to max so g doesn't overflow (or satClamped if less)
				satClamped = min(min((g-gDiff), 255-(g-gDiff)) / gDiff, satClamped);
			}
			if(bOverflow){ // if b overflows, clamp sat to max so b doesn't overflow (or satClamped if less)
				satClamped = min(min((b-bDiff), 255-(b-bDiff)) / bDiff, satClamped);
			}
			outputImage.pixel(x,y).r = satClamped*rDiff + (r-rDiff);
			outputImage.pixel(x,y).g = satClamped*gDiff + (g-gDiff);
			outputImage.pixel(x,y).b = satClamped*bDiff + (b-bDiff);
			outputImage.pixel(x,y).a = this->pixel(x,y).a;
		}
	}	
	return 1;
}
开发者ID:jnayak1,项目名称:CS-4810,代码行数:40,代码来源:image.todo.cpp

示例8: float

int Image32::OrderedDither2X2(const int& bits,Image32& outputImage) const
{
	int height = this->height();
	int width = this->width();
	int i;
	int j;
	float D[2][2];
	D[0][0] = 1.0;
	D[0][1] = 3.0;
	D[1][0] = 4.0;
	D[1][1] = 2.0;

	Image32 interImage;
	interImage.setSize(width,height);

	float scaler255 = (255.0/pow(2,bits-1));

	this->Quantize(bits,interImage);


	for(int y=0; y<height; ++y){
		for (int x = 0; x<width; ++x){
			i = x % 2;
			j = y % 2;

			float r = float(this->pixel(x,y).r) / 255.0;
			float g = float(this->pixel(x,y).g) / 255.0;
			float b = float(this->pixel(x,y).b) / 255.0;

			float cR = r*pow(2,bits-1);
			float cG = g*pow(2,bits-1);
			float cB = b*pow(2,bits-1);

			float eR =  cR - floor(cR);
			float eG =  cG - floor(cG);
			float eB =  cB - floor(cB);

			if(eR > (D[i][j] / 8)) {outputImage.pixel(x,y).r = int(ceil(cR)*scaler255);}
			else{outputImage.pixel(x,y).r = int(floor(cR) * scaler255);}

			if(eG > (D[i][j] / 8)) {outputImage.pixel(x,y).g = int(ceil(cG)*scaler255);}
			else{outputImage.pixel(x,y).g = int(floor(cG) * scaler255);}

			if(eB > (D[i][j] / 8)) {outputImage.pixel(x,y).b = int(ceil(cB)*scaler255);}
			else{outputImage.pixel(x,y).b = int(floor(cB) * scaler255);}

			outputImage.pixel(x,y).a = this->pixel(x,y).a;
		}
	}
	return 1;
}
开发者ID:jnayak1,项目名称:CS-4810,代码行数:51,代码来源:image.todo.cpp


注:本文中的Image32::pixel方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。