|
|
- -------------------------------------------------------------------------------------------
- --
- -- raylib [textures] example - Image processing
- --
- -- NOTE: Images are loaded in CPU memory (RAM) textures are loaded in GPU memory (VRAM)
- --
- -- This example has been created using raylib 1.6 (www.raylib.com)
- -- raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
- --
- -- Copyright (c) 2014-2016 Ramon Santamaria (@raysan5)
- --
- -------------------------------------------------------------------------------------------
-
- --#include <stdlib.h> -- Required for: free()
-
- NUM_PROCESSES = 8
-
- -- enum ImageProcess
- local COLOR_NONE = 1
- local COLOR_GRAYSCALE = 2
- local COLOR_TINT = 3
- local COLOR_INVERT = 4
- local COLOR_CONTRAST = 5
- local COLOR_BRIGHTNESS = 6
- local FLIP_VERTICAL = 7
- local FLIP_HORIZONTAL = 8
-
- local processText = {
- "NO PROCESSING",
- "COLOR GRAYSCALE",
- "COLOR TINT",
- "COLOR INVERT",
- "COLOR CONTRAST",
- "COLOR BRIGHTNESS",
- "FLIP VERTICAL",
- "FLIP HORIZONTAL"
- }
-
- -- Initialization
- -------------------------------------------------------------------------------------------
- local screenWidth = 800
- local screenHeight = 450
-
- InitWindow(screenWidth, screenHeight, "raylib [textures] example - image processing")
-
- -- NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required)
-
- local image = LoadImage("resources/parrots.png") -- Loaded in CPU memory (RAM)
- image = ImageFormat(image, TextureFormat.UNCOMPRESSED_R8G8B8A8) -- Format image to RGBA 32bit (required for texture update)
- local texture = LoadTextureFromImage(image) -- Image converted to texture, GPU memory (VRAM)
-
- local currentProcess = COLOR_NONE
- local textureReload = false
-
- local selectRecs = {}
-
- for i = 1, NUM_PROCESSES do selectRecs[i] = Rectangle(40, 50 + 32*i, 150, 30) end
-
- SetTargetFPS(60)
- -------------------------------------------------------------------------------------------
-
- -- Main game loop
- while not WindowShouldClose() do -- Detect window close button or ESC key
- -- Update
- ---------------------------------------------------------------------------------------
- if (IsKeyPressed(KEY.DOWN)) then
- currentProcess = currentProcess + 1
- if (currentProcess > NUM_PROCESSES) then currentProcess = 1 end
- textureReload = true
- elseif (IsKeyPressed(KEY.UP)) then
- currentProcess = currentProcess - 1
- if (currentProcess < 1) then currentProcess = NUM_PROCESSES end
- textureReload = true
- end
-
- if (textureReload) then
- UnloadImage(image) -- Unload current image data
- image = LoadImage("resources/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
- if (currentProcess == COLOR_GRAYSCALE) then image = ImageColorGrayscale(image)
- elseif (currentProcess == COLOR_TINT) then image = ImageColorTint(image, GREEN)
- elseif (currentProcess == COLOR_INVERT) then image = ImageColorInvert(image)
- elseif (currentProcess == COLOR_CONTRAST) then image = ImageColorContrast(image, -40)
- elseif (currentProcess == COLOR_BRIGHTNESS) then image = ImageColorBrightness(image, -80)
- elseif (currentProcess == FLIP_VERTICAL) then image = ImageFlipVertical(image)
- elseif (currentProcess == FLIP_HORIZONTAL) then image = ImageFlipHorizontal(image)
- end
-
- local pixels = {}
- pixels = GetImageData(image) -- Get pixel data from image (RGBA 32bit)
- texture = UpdateTexture(texture, pixels) -- Update texture with new image data
-
- textureReload = false
- end
- ---------------------------------------------------------------------------------------
-
- -- Draw
- ---------------------------------------------------------------------------------------
- BeginDrawing()
-
- ClearBackground(RAYWHITE)
-
- DrawText("IMAGE PROCESSING:", 40, 30, 10, DARKGRAY)
-
- -- Draw rectangles
- for i = 1, NUM_PROCESSES do
- if (i == currentProcess) then
- DrawRectangleRec(selectRecs[i], SKYBLUE)
- DrawRectangleLines(selectRecs[i].x, selectRecs[i].y, selectRecs[i].width, selectRecs[i].height, BLUE)
- DrawText(processText[i], selectRecs[i].x + selectRecs[i].width/2 - MeasureText(processText[i], 10)//2, selectRecs[i].y + 11, 10, DARKBLUE)
- else
- DrawRectangleRec(selectRecs[i], LIGHTGRAY)
- DrawRectangleLines(selectRecs[i].x, selectRecs[i].y, selectRecs[i].width, selectRecs[i].height, GRAY)
- DrawText(processText[i], selectRecs[i].x + selectRecs[i].width/2 - MeasureText(processText[i], 10)//2, selectRecs[i].y + 11, 10, DARKGRAY)
- end
- end
-
- DrawTexture(texture, screenWidth - texture.width - 60, screenHeight/2 - texture.height/2, WHITE)
- DrawRectangleLines(screenWidth - texture.width - 60, screenHeight/2 - texture.height/2, texture.width, texture.height, BLACK)
-
- EndDrawing()
- ---------------------------------------------------------------------------------------
- end
-
- -- De-Initialization
- -------------------------------------------------------------------------------------------
- UnloadTexture(texture) -- Unload texture from VRAM
- UnloadImage(image) -- Unload image from RAM
-
- CloseWindow() -- Close window and OpenGL context
- -------------------------------------------------------------------------------------------
|