[英]Java image sampling functions analogues in C#
我目前正在嘗試將圖像編輯應用程序從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”? 代碼示例受到高度贊賞。
當我設法找出這些方法的目的時,很清楚如何重寫它們。 我已經成功移植了應用程序,這兩種方法(在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); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.