From b487f62ba7cd7dbbcadb2b5704ec1c99f6578390 Mon Sep 17 00:00:00 2001 From: Tim Keller Date: Tue, 6 May 2025 21:17:38 -0500 Subject: initial commit --- pix.py | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 pix.py (limited to 'pix.py') diff --git a/pix.py b/pix.py new file mode 100644 index 0000000..988f83d --- /dev/null +++ b/pix.py @@ -0,0 +1,89 @@ +import sys +from OpenGL.GL import * +from OpenGL.GLUT import * +from OpenGL.GLU import * +from PIL import Image +from time import time + +from transition import Transition + +display_time = 2.0 +transition_duration = 0.5 + +# Load image as a texture using PIL +def load_texture(image_path): + img = Image.open(image_path) + img = img.convert("RGBA") # Ensure the image is in RGBA mode (4 channels: R, G, B, A) + img_data = img.tobytes("raw", "RGBA", 0, -1) # Convert image data to bytes + + texture_id = glGenTextures(1) + glBindTexture(GL_TEXTURE_2D, texture_id) + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img.width, img.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, img_data) + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) + return texture_id + +# Main display function +transition = Transition() +def display(): + global start_time, image_time, last_time, alpha, texture_id1, texture_id2 + + current_time = time() + alive_time = current_time - start_time + delta_time = current_time - last_time + last_time = current_time + image_time += delta_time + + if (image_time < display_time): + return + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) + glLoadIdentity() + + # Get window size + window_width, window_height = glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT) + + # DRAW + transition_time = image_time - display_time + complete = transition.draw(texture_id1, texture_id2, window_width, window_height, delta_time, transition_time, transition_duration) + + glClearColor(0.0, 0.0, 0.0, 1.0) # Set the background color to black + + glutSwapBuffers() + + if (complete): + image_time = 0 + texture_id1, texture_id2 = texture_id2, texture_id1 + +# Initialization and main loop +def main(): + global texture_id1, texture_id2, alpha, last_time, start_time, image_time + + # Initialize the window + glutInit(sys.argv) + glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB) + glutCreateWindow("Image Viewer with Fade Transition") + glEnable(GL_TEXTURE_2D) + + # Load two images for transition + texture_id1 = load_texture("image1.jpg") + texture_id2 = load_texture("image2.jpg") + + alpha = 0.0 # Start with fully transparent + image_time = 0 + start_time = time() + last_time = time() + + # Set up the OpenGL viewport and projection + glMatrixMode(GL_PROJECTION) + glLoadIdentity() + glOrtho(-1, 1, -1, 1, -1, 1) + glMatrixMode(GL_MODELVIEW) + + glutDisplayFunc(display) + glutIdleFunc(display) + glutMainLoop() + +if __name__ == "__main__": + main() + -- cgit v1.2.3