step
This commit is contained in:
parent
0bec81c656
commit
fe6d2c0ed3
190 changed files with 104835 additions and 5 deletions
135
examples/textures/image_processing/main.go
Normal file
135
examples/textures/image_processing/main.go
Normal file
|
@ -0,0 +1,135 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
rl "github.com/gen2brain/raylib-go/raylib"
|
||||
)
|
||||
|
||||
const numProcesses = 8
|
||||
|
||||
// Process
|
||||
const (
|
||||
None = iota
|
||||
ColorGrayscale
|
||||
ColorTint
|
||||
ColorInvert
|
||||
ColorContrast
|
||||
ColorBrightness
|
||||
FlipVertical
|
||||
FlipHorizontal
|
||||
)
|
||||
|
||||
var processText = []string{
|
||||
"NO PROCESSING",
|
||||
"COLOR GRAYSCALE",
|
||||
"COLOR TINT",
|
||||
"COLOR INVERT",
|
||||
"COLOR CONTRAST",
|
||||
"COLOR BRIGHTNESS",
|
||||
"FLIP VERTICAL",
|
||||
"FLIP HORIZONTAL",
|
||||
}
|
||||
|
||||
func main() {
|
||||
screenWidth := int32(800)
|
||||
screenHeight := int32(450)
|
||||
|
||||
rl.InitWindow(screenWidth, screenHeight, "raylib [textures] example - image processing")
|
||||
|
||||
image := rl.LoadImage("parrots.png") // Loaded in CPU memory (RAM)
|
||||
rl.ImageFormat(image, rl.UncompressedR8g8b8a8) // Format image to RGBA 32bit (required for texture update)
|
||||
texture := rl.LoadTextureFromImage(image) // Image converted to texture, GPU memory (VRAM)
|
||||
|
||||
currentProcess := None
|
||||
textureReload := false
|
||||
|
||||
selectRecs := make([]rl.Rectangle, numProcesses)
|
||||
|
||||
for i := 0; i < numProcesses; i++ {
|
||||
selectRecs[i] = rl.NewRectangle(40, 50+32*float32(i), 150, 30)
|
||||
}
|
||||
|
||||
rl.SetTargetFPS(60)
|
||||
|
||||
for !rl.WindowShouldClose() {
|
||||
if rl.IsKeyPressed(rl.KeyDown) {
|
||||
currentProcess++
|
||||
if currentProcess > 7 {
|
||||
currentProcess = 0
|
||||
}
|
||||
textureReload = true
|
||||
} else if rl.IsKeyPressed(rl.KeyUp) {
|
||||
currentProcess--
|
||||
if currentProcess < 0 {
|
||||
currentProcess = 7
|
||||
}
|
||||
textureReload = true
|
||||
}
|
||||
|
||||
if textureReload {
|
||||
rl.UnloadImage(image) // Unload current image data
|
||||
image = rl.LoadImage("parrots.png") // Re-load image data
|
||||
|
||||
// NOTE: Image processing is a costly CPU process to be done every frame,
|
||||
// If image processing is required in a frame-basis, it should be done
|
||||
// with a texture and by shaders
|
||||
switch currentProcess {
|
||||
case ColorGrayscale:
|
||||
rl.ImageColorGrayscale(image)
|
||||
break
|
||||
case ColorTint:
|
||||
rl.ImageColorTint(image, rl.Green)
|
||||
break
|
||||
case ColorInvert:
|
||||
rl.ImageColorInvert(image)
|
||||
break
|
||||
case ColorContrast:
|
||||
rl.ImageColorContrast(image, -40)
|
||||
break
|
||||
case ColorBrightness:
|
||||
rl.ImageColorBrightness(image, -80)
|
||||
break
|
||||
case FlipVertical:
|
||||
rl.ImageFlipVertical(image)
|
||||
break
|
||||
case FlipHorizontal:
|
||||
rl.ImageFlipHorizontal(image)
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
||||
pixels := rl.LoadImageColors(image) // Get pixel data from image (RGBA 32bit)
|
||||
rl.UpdateTexture(texture, pixels) // Update texture with new image data
|
||||
|
||||
textureReload = false
|
||||
}
|
||||
|
||||
rl.BeginDrawing()
|
||||
|
||||
rl.ClearBackground(rl.RayWhite)
|
||||
|
||||
rl.DrawText("IMAGE PROCESSING:", 40, 30, 10, rl.DarkGray)
|
||||
|
||||
// Draw rectangles
|
||||
for i := 0; i < numProcesses; i++ {
|
||||
if i == currentProcess {
|
||||
rl.DrawRectangleRec(selectRecs[i], rl.SkyBlue)
|
||||
rl.DrawRectangleLines(int32(selectRecs[i].X), int32(selectRecs[i].Y), int32(selectRecs[i].Width), int32(selectRecs[i].Height), rl.Blue)
|
||||
rl.DrawText(processText[i], int32(selectRecs[i].X+selectRecs[i].Width/2)-rl.MeasureText(processText[i], 10)/2, int32(selectRecs[i].Y)+11, 10, rl.DarkBlue)
|
||||
} else {
|
||||
rl.DrawRectangleRec(selectRecs[i], rl.LightGray)
|
||||
rl.DrawRectangleLines(int32(selectRecs[i].X), int32(selectRecs[i].Y), int32(selectRecs[i].Width), int32(selectRecs[i].Height), rl.Gray)
|
||||
rl.DrawText(processText[i], int32(selectRecs[i].X+selectRecs[i].Width/2)-rl.MeasureText(processText[i], 10)/2, int32(selectRecs[i].Y)+11, 10, rl.DarkGray)
|
||||
}
|
||||
}
|
||||
|
||||
rl.DrawTexture(texture, screenWidth-texture.Width-60, screenHeight/2-texture.Height/2, rl.White)
|
||||
rl.DrawRectangleLines(screenWidth-texture.Width-60, screenHeight/2-texture.Height/2, texture.Width, texture.Height, rl.Black)
|
||||
|
||||
rl.EndDrawing()
|
||||
}
|
||||
|
||||
rl.UnloadTexture(texture)
|
||||
|
||||
rl.CloseWindow()
|
||||
}
|
BIN
examples/textures/image_processing/parrots.png
Normal file
BIN
examples/textures/image_processing/parrots.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 288 KiB |
Loading…
Add table
Add a link
Reference in a new issue