Golang 画像操作: 画像のグラデーション マッピングとテクスチャ マッピングを実行する方法
概要:
画像処理では、グラデーション マッピングとテクスチャ マッピングが一般的に使用される 2 つのテクノロジです。グラデーションはカラー効果の滑らかな遷移を作成でき、テクスチャ マッピングはテクスチャ イメージをターゲット イメージにマッピングできます。この記事では、Golang プログラミング言語を使用して画像に対してグラデーションおよびテクスチャ マッピング操作を実行する方法を紹介します。
image
と image/color
をインポートする必要があります。以下は、グラデーション画像を作成してグラデーション効果を実現するサンプルコードです。 package main import ( "image" "image/color" "image/png" "os" ) // 渐变图片函数 func createGradient(width, height int) *image.RGBA { img := image.NewRGBA(image.Rect(0, 0, width, height)) // 渐变色起始颜色和结束颜色 startColor := color.RGBA{255, 0, 0, 255} // 红色 endColor := color.RGBA{0, 0, 255, 255} // 蓝色 // 计算每个像素的颜色并设置到图片上 for y := 0; y < height; y++ { for x := 0; x < width; x++ { percent := float64(x) / float64(width-1) r := uint8(float64(startColor.R)*(1-percent) + float64(endColor.R)*percent) g := uint8(float64(startColor.G)*(1-percent) + float64(endColor.G)*percent) b := uint8(float64(startColor.B)*(1-percent) + float64(endColor.B)*percent) img.SetRGBA(x, y, color.RGBA{r, g, b, 255}) } } return img } func main() { width, height := 640, 480 img := createGradient(width, height) // 保存图片 file, _ := os.Create("gradient.png") defer file.Close() png.Encode(file, img) }
上記のコードでは、まず image.RGBA
オブジェクトを作成し、幅と高さを指定します。次に、二重ループを通じて各ピクセルを走査し、開始色と終了色の比率に基づいて各ピクセルの色を計算し、それを画像に設定します。最後に、生成されたグラデーション画像を gradient.png
ファイルとして保存します。
上記のコードを実行すると、幅 640 ピクセル、高さ 480 ピクセルのグラデーション画像が得られます。
draw.Draw
関数を使用してテクスチャ マッピング操作を完了できます。以下は対象画像にテクスチャマッピング効果を追加するサンプルコードです。 package main import ( "image" "image/color" "image/draw" "image/png" "os" ) // 纹理映射函数 func applyTexture(targetImg draw.Image, textureImg image.Image, offsetX, offsetY int) { bounds := targetImg.Bounds() textureBounds := textureImg.Bounds() // 遍历目标图像的每个像素点,并根据纹理图像的坐标系获取对应的颜色值 for y := bounds.Min.Y; y < bounds.Max.Y; y++ { for x := bounds.Min.X; x < bounds.Max.X; x++ { textureX := (x-offsetX)%textureBounds.Dx() textureY := (y-offsetY)%textureBounds.Dy() textureColor := textureImg.At(textureX, textureY) targetImg.Set(x, y, textureColor) } } } func main() { targetImgFile, _ := os.Open("target.png") // 目标图像文件 targetImg, _ := png.Decode(targetImgFile) textureImgFile, _ := os.Open("texture.png") // 纹理图像文件 textureImg, _ := png.Decode(textureImgFile) offsetX, offsetY := 100, 100 // 纹理映射的偏移值 // 创建一个新的图像作为结果 resultImg := image.NewRGBA(targetImg.Bounds()) draw.Draw(resultImg, resultImg.Bounds(), targetImg, image.ZP, draw.Src) // 应用纹理映射 applyTexture(resultImg, textureImg, offsetX, offsetY) // 保存结果图像 resultFile, _ := os.Create("result.png") defer resultFile.Close() png.Encode(resultFile, resultImg) }
上記のコードでは、まずターゲット イメージ ファイルとテクスチャ イメージ ファイルを開き、png.Decode
関数を通じてそれらを Golang イメージ オブジェクトにデコードします。次に、結果イメージとして新しい image.RGBA
オブジェクトを作成し、draw.Draw
関数を使用して、結果イメージ上にターゲット イメージを描画します。
最後に、applyTexture
関数を呼び出して、テクスチャ イメージを結果イメージにマッピングします。結果イメージの各ピクセルをトラバースし、テクスチャ イメージの座標系に従って対応するカラー値を取得することにより、テクスチャ カラーが結果イメージに設定されます。
上記のコードを実行すると、ターゲット イメージにテクスチャ マッピング効果が追加された結果のイメージが得られます。
要約:
上記の例を通じて、Golang を使用して画像に対してグラデーションおよびテクスチャ マッピング操作を実行する方法を学びました。これらの技術は、画像処理やコンピュータグラフィックス、ゲーム開発などに応用され、画像の美しさや視覚効果を高めることができます。この記事があなたの学習や実践に役立つことを願っています。
以上がGolang 画像操作: 画像のグラデーションとテクスチャ マッピングを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。