How to Change Pixels of an Image: Retro Sprite Walkthrough

Summary

Learn how to change pixels of an image to create retro game sprites. A step-by-step Aseprite walkthrough covering downscaling, palettes, and cleanup.

Project Brief: Cyberpunk Alleyway Tile (64x64)

Transforming a high-resolution photograph into a constrained, retro-style game asset requires a fundamental shift in how you perceive digital art. You are no longer painting with continuous tones; you are managing a strict grid of discrete color values. In this walkthrough, we will convert a 1080p photograph of a neon-lit cyberpunk alleyway into a seamless 64x64 pixel art floor tile using Aseprite v1.3. The retail price of Aseprite is $19.99 on Steam, and it remains the industry standard for 2D sprite manipulation in 2026 due to its robust indexed color management and specialized resampling algorithms.

Phase 1: Algorithmic Downscaling and Canvas Math

The first step is reducing the physical dimensions of the source image. A standard 1920x1080 image contains over 2 million pixels. Our target is a 64x64 grid, which holds exactly 4,096 pixels. This represents a 99.8% reduction in data. If you simply resize the image using standard bilinear interpolation, the result will be an unusable, blurry smudge.

To preserve structural integrity, we must use pixel-aware resampling. In Aseprite, navigate to Sprite > Sprite Size. Disable 'Lock Aspect Ratio' if you need to force a square crop, and select your interpolation method from the dropdown. Below is a comparison of the three primary algorithms available in modern pixel art editors:

Algorithm Mechanism Best Use Case Artifact Risk
Nearest Neighbor Selects the closest source pixel without blending. Hard-surface scaling, UI elements, strict integer scaling. High aliasing (jaggies) on diagonal lines and curves.
Bilinear Averages surrounding pixels to create smooth transitions. High-res concept art, modern HD-2D backgrounds. Creates blurry 'mixels' (mixed resolutions), destroying the pixel grid.
RotSprite Scale-then-rotate algorithm optimized for pixel grids. Organic shapes, character sprites, complex architectural curves. Minimal. Preserves curves without introducing sub-pixel blurring.

For our cyberpunk alleyway, which features curved neon tubing and angled fire escapes, select RotSprite. Set the width and height to 64px and apply. The resulting image will retain recognizable edges, but the color data will still be a chaotic mess of millions of hex codes.

Phase 2: Color Quantization and Palette Locking

Pixel art relies on intentional color constraints. A 64x64 tile with 500 colors looks like a compressed JPEG; a 64x64 tile with 16 colors looks like a deliberate retro asset. We need to map the millions of downsampled colors to a strict 16-color palette.

Instead of generating a random palette, we will use a curated, hue-shifted palette to maintain the cyberpunk aesthetic. The Lospec Palette Database is the definitive resource for this. Search for 'Cyberpunk 16' or construct a custom palette using the HSB (Hue, Saturation, Brightness) color wheel. A professional technique for shadows in neon environments is to shift the hue by 15-20 degrees toward blue/purple while decreasing brightness, rather than simply adding black.

Warning: RGB vs. Indexed Mode
Before applying your palette, ensure your sprite is in Indexed Color Mode (Sprite > Color Mode > Indexed). If you remain in RGB mode, Aseprite will allow anti-aliased brush strokes that introduce off-palette colors, ruining your strict 16-color limit and causing issues during engine integration.

Apply your 16-color palette to the Aseprite palette dock. Next, use the Color Replace tool. Select the most prominent muddy brown color generated by the downscale, hold Shift, and click your designated dark shadow color in the palette. Repeat this batch-replacement process until the image strictly adheres to the 16-color limit.

Phase 3: Manual Pixel Surgery

Algorithmic downscaling and color quantization only get you 80% of the way there. The remaining 20% requires manual intervention. Understanding how to change pixels of an image manually is the dividing line between a blurry downscaled photo and a professional game asset. You must now act as a digital sculptor, removing noise and clarifying silhouettes.

1. Eradicating Mixels and Orphan Noise

Zoom in to 800%. You will notice 'orphan pixels'—single 1x1 dots of a specific color completely surrounded by a different color. These are artifacts from the RotSprite algorithm attempting to anti-alias a curve. In strict pixel art, these look like compression noise. Select the Eraser tool (Shortcut: E) and meticulously delete any 1x1 or 2x1 orphan clusters that do not contribute to the structural silhouette of the neon signs or brickwork.

2. Manual Anti-Aliasing (AA) on Curves

Because we avoided Bilinear interpolation, our diagonal neon tubes will have harsh, stair-step edges (jaggies). To fix this, we apply manual anti-aliasing. Select the Pencil tool (Shortcut: B). Choose a color that sits exactly halfway between the neon tube's core color and the dark alleyway background. Place single pixels of this intermediate color strictly on the interior corners of the stair-step curves. This tricks the human eye into perceiving a smooth diagonal line without breaking the pixel grid.

3. Dithering for Gradient Transitions

Photographs have smooth gradients; pixel art simulates them using dithering. Where the neon light hits the wet pavement, use a 50% checkerboard dither pattern (alternating pixels of the highlight color and the mid-tone color) to create a smooth transition. Aseprite’s Decorative Brush settings or custom dithering brushes can automate this, but manual placement using a 2x2 grid ensures you avoid the 'noisy' look of randomized algorithmic dithering.

Expert Insight: When learning how to change pixels of an image from a high-res source, the most common beginner mistake is over-detailing. A 64x64 canvas does not have the physical space to render individual bricks. You must abstract the idea of a brick wall using 2x2 pixel clusters and strategic shadow placement, rather than attempting to trace the original photograph's mortar lines.

Phase 4: Engine-Ready Export Settings

Your 64x64 tile is now complete, but exporting it incorrectly will ruin your work when imported into a game engine like Godot 4.x or Unity. Game engines default to bilinear texture filtering, which will blur your crisp pixels the moment the camera moves.

In Aseprite, go to File > Export. Set the scale to 800% (yielding a 512x512 PNG). This pre-scales the image using Nearest Neighbor interpolation, ensuring the pixels remain perfectly sharp even if the engine attempts to compress it. However, pre-scaling is only half the battle.

When importing the 512x512 PNG into Godot 4.x, you must override the default texture import settings. According to the Godot Engine Import Documentation, you must select the image in the FileSystem dock, navigate to the Import tab, and change the Texture Filter from 'Linear' to 'Nearest'. This forces the rendering pipeline to respect the hard edges of your pixel grid, preventing the dreaded 'pixel swim' or shimmering effect during parallax scrolling.

Final Checklist for Integration

By following this exact pipeline, you transition from simply applying a pixelation filter to actively designing with pixel-level intent. The ability to manually dictate the value of individual pixels on a constrained grid is the core competency of retro game art, ensuring your assets remain crisp, readable, and performant in any modern 2D rendering pipeline.

Try it in the editor

Drop a photo and apply these settings yourself.

Open Pixel Art Workshop →

Related guides

← All guides