簡體   English   中英

C#中的Java圖像采樣函數類似物

[英]Java image sampling functions analogues in C#

我目前正在嘗試將圖像編輯應用程序從Java移植到C#,並且遇到了java.awt.image.BandedSampleModel包中以下方法的問題:

  • int getSample(int x,int y,int band,int value)
  • void setSample(int x,int y,int band,int value)

原始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);
    }

問題如下:

  1. getSamplesetSample方法實際上是做什么的? 據我了解,它們用於獲取和設置(x,y)位置中像素的值(R + G + B的總和 方法的簽名中包含什么“ int band”?
  2. 據我所知,默認的C#API中沒有模擬函數。 如果是這樣,應該如何在C#上重寫這些函數以具有相同的簽名和行為?

代碼示例受到高度贊賞。

  1. 在Java應用程序中查看了這些函數的用法后,我發現'band'參數的范圍可以為[0,2]。 此參數指定RGB通道號(0 –紅色,1 –貪婪,2 –藍色)。
  2. 當我設法找出這些方法的目的時,很清楚如何重寫它們。 我已經成功移植了應用程序,這兩種方法(在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM