**Assignment 0 Gallery** Winners (+2.0 points) =============================== ![**tcyr**: In this piece I simulated a solar eclipse. I used customFilter to reduce the saturation and luminance of the photo and called brushFilter and softBrushFilter to draw the sun and moon. To get change over time, I set the sun's halo size and color and moon's position as well as the degree of desaturation and darkening to be based on the input value. I took 21 samples with the slider at different values and used giphy.com to make a gif out of them.](./gallery/tcyr.gif border="1" width="640px") ![**loisd**: I attempted to paint a tiger! I started out using the regular brush on an orange fill layer, but it was way too spotty. The soft brush had the same issue, but looked better because of how it blended, so I ended up using mainly the soft brush. The history is included below, but it is very long... For some reason, the last brush actions I did (cleaning up the blue spots from the face) aren't being recorded, which is why the included png is different from the recreatable history.](./gallery/loisd.png border="1" width="640px") ![**sw24**: For the art contest, I channeled my inner Impressionist and made a pretty basic custom filter that randomly sampled the pixels with a 0.5 probability; if sampled, I drew a circle. This created a mildly pointillist effect, which looked best on the doge. As an added bonus, if you move the value slider around the points move too, since they're resampled every time!](./gallery/sw24.png border="1" width="640px") ![**jz6**: For the art contest I borrowed my old COS 126 Art.java idea and added a few new touches to it with a soft brush esque filter. The idea is you recursively draw smaller and smaller circles which form part of the tree until a certain radius is reached. At each circle there is a small chance to branch off. At the end of every branch there is a small chance to create a large "leaf" which is simply a large semi translucent circle. The input value specifies how small the circles can get. A larger value results in smaller end circles which means a larger tree. I also used a number of helper functions to make the code a little cleaner. They should be self explanatory.](./gallery/jz6.png border="1" width="640px") ![**vzhou**: For my custom filter, I implemented a blur filter that takes a blur radius and sets each pixel to the average value of all pixels within its blurRadius. I then used that to generate my Art Contest submission below.](./gallery/vzhou.png border="1" width="640px") Runner-ups (+1.5 points) =============================== ![**brandonm**: I decided to make some pixel art in celebration of Valentine's Day. I wrote a function to first draw "pixels", which are just large squares of consistent color. I then wrote a function to draw these pixels in a more intuitive, "grid" fashion using coordinates that I took from pixel art examples online. I then wrote a function to draw all provided pixels in an array of relative locations, and finally ran this 6 times with different starting locations to draw all my hearts.](./gallery/brandonm.png border="1" width="640px") ![**dkchae**: Take a landscape image and any region that is not the sky has repeating rainbow shading over the land. It is RAINBOW LAND! This is done by isolating all the pixels that could possibly represent the sky and any colors that are "white" (based on blue color). Then I handpicked pretty colors and had it repeating as long as it is not the sky. This would only work when the sky is the only region that is clearly blue (rivers will be identified as "sky" and not colored). Works well with canyon images such as mesa.jpg! The value scale is used to indicate how bright we want our rainbow to show on the land.](./gallery/dkchae.png border="1" width="640px") ![](./gallery/jacobz1.jpg border="1" width="640px") ![**jacobz**: My contribution to the art contest is my interpretation of an inverse barrel distortion. Normally, a barrel distortion causes the center of the image to swell in size, but in my implementation, the center stays relatively the same size while the outer edges grow in size. My algorithm consists of two parts. The first is the actual distortion, which relies heavily on trigonometry. The equation used to generate the effect was adapted from the formula at this Stack Overflow post. The second part of my algorithm is a blend effect. Because the distortion enlarges some elements of the image, gaps between pixels appear. I introduced a simple algorithm to fill these gaps.](./gallery/jacobz2.gif border="1" width="640px") ![**mshu**: The custom filter iteratively selects two random pixels whose x and y coordinates are within 1 of each other, and swaps them. The number of iterations scales linearly with the input value (multiplied by a factor of ten times the number of pixels in the picture).](./gallery/mshu.png border="1" width="640px") ![](./gallery/rbova1.jpg border="1" width="640px") ![**rbova**: For my custom filter I implemented a "Deep Fryer". Inspired by the art style of "deep fried memes," this filter exaggerates the saturation of an image, greatly reduces the number of colors that can be represented, and biases the photo's hue towards the hot zones of the color wheel. Additionally, I used normal distribution functions to add random noise, and to construct random walks that warp the photo. The net result of this filter is an image that looks hot and crispy, hence the name.](./gallery/rbova2.png border="1" width="640px") ![](./gallery/whhuang1.gif border="1" width="640px") ![**whhuang**: The Custom filter, i.e. Art Contest submission, creates vertical stripes throughout the image of other sections of the image, giving the picture a glass/mirror-distortion-like effect. The Custom filter accepts an image and a value as arguments, and returns an image. The width and spacing of each stripe is proportional to the stripe's distance from x = 0, defined as the leftmost pixels of the image. The input value determines the position of the last stripe (the number of stripes is constant). These dependencies allow for more dynamic visual effects when the input value changes. Within each stripe, the pixels along the x-direction are the same (giving a stretched-out effect), and each pixel is copied from a determined location to the left. In order to ensure the stripes only copy pixels from the original image and not from other stripes, the image is traversed from right to left, so pixels to the left of each stripe that is created is part of the original image. ](./gallery/whhuang2.gif border="1" width="640px") ![**wps3**: For the art contest filter, I've made a psychadelic vignette filter that mixes the traditional vignette effect with a radius-dependent HSL shift, which distorts the image in interesting and attractive ways (most of the time). It's definitely a step away from realism. Basically, the implementation iterates over every pixel in the image, scaling its HSL value and darkening the pixel in proportion to the pixel's distance from the center. This produces the effect seen below!](./gallery/wps3.png border="1" width="640px") ![**lukep**: For the art contest, I submitted a mashup of two great images. I used the soft brush to add some sun glare to the face and really make it feel like you're there. I call her: Dobelstein.](./gallery/lukep.png border="1" width="320px") ![**ahargil**: I had some fun and used the the brushes to paint on an image of NYC. (I apologize for the clutter below, but that's the price of consistency.)](./gallery/ahargil.png border="1" width="640px") ![**ctshen**: Performs a weighted average on each pixel based on its neighbors with some strange scalings. This result makes the image appear like it has been imprinted on a wall.](./gallery/ctshen1.png border="1" width="640px") ![**kraigm**: I implemented cut and paste operations to make pure beauty. Cut works by looking at the start and end center points in vertsStrings and saving all of the pixels between those points in a rectangle. Paste works by taking the saved pixels and applying them to the first spot clicked in an image.](./gallery/kraigm.png border="1" width="640px") ![**yap**: This is my take on Childish Gambino's Awaken My Love album artwork. I basically just inverted the colors of each pixel touched by the brush.](./gallery/yap.png border="1" width="640px")