In this talk, we will first present the concept of a computational camera. It is a device that embodies the convergence of the camera and the computer. It uses new optics to select rays from the scene in unusual ways, and an appropriate algorithm to process the selected rays. This ability to manipulate images before they are recorded and process the recorded images before they are presented is a powerful one. It enables us to experience our visual world in rich and compelling ways. We will show computational cameras that can capture wide angle, high dynamic range, multispectral, and depth images. Finally, we will explore the use of a programmable light source as a more sophisticated camera flash. We will show how the use of such a flash enables a camera to produce images that reveal the complex interactions of light within objects as well as between them.