我目前正在尝试将图像编辑应用程序从Java移植到C#,并且我已经通过 java.awt.image.BandedSampleModel 包中的以下方法遇到了这个问题:
原始Java代码:
public int getSample(int x, int y, int band)
{
return image.getRaster().getSample(x, y, band);
}
public void setSample(int x, int y, int band, int value)
{
image.getRaster().setSample(x, y, band, value);
}
问题如下:
getSample
和setSample
方法有什么作用?据我所知,它们用于获取和设置(x,y)位置中像素的值(R + G + B之和)。什么' int band'是否包含在方法的签名中?我们非常感谢代码示例。
答案 0 :(得分:1)
由于我已经设法找出这种方法的目的,我很清楚如何重写它们。我已经成功移植了应用程序,这两种方法(在C#和Java上)具有相同的行为。
public int getSample(int x, int y, int band)
{
//return image.getRaster().getSample(x, y, band);
var pixelColor = image.GetPixel(x, y);
switch (band)
{
case 0: return pixelColor.R;
case 1: return pixelColor.G;
case 2: return pixelColor.B;
}
throw new ArgumentException(nameof(band));
}
public void setSample(int x, int y, int band, int value)
{
//image.getRaster().setSample(x, y, band, value);
var oldColor = image.GetPixel(x, y);
Color newColor;
switch (band)
{
case 0:
newColor = Color.FromArgb(255, value, oldColor.G, oldColor.B);
break;
case 1:
newColor = Color.FromArgb(255, oldColor.R, value, oldColor.B);
break;
case 2:
newColor = Color.FromArgb(255, oldColor.R, oldColor.G, value);
break;
default:
throw new ArgumentException(nameof(band));
}
image.SetPixel(x, y, newColor);
}