All users will need to merge their Minecraft Forum account with a new or existing Twitch account starting October 23rd. You can merge your accounts by clicking here. Have questions? Learn more here.
Dismiss
  • 0

    posted a message on Official Chat Thread: New Beginnings Edition!

    Overwatch now running at 60 tick serves, awww yeah.

    Posted in: General Off Topic
  • 0

    posted a message on Official Chat Thread: New Beginnings Edition!
    Quote from Dinh_AaronMk»


    >You will never miss Dunken Donuts as much as these people.


    Also officer Siko is best cop.

    And what does Dutch Smith even DO to make Dunken Donuts such a regular fixture in his regular legal needs?


    This news report is so American.
    Posted in: General Off Topic
  • 0

    posted a message on Official Chat Thread: New Beginnings Edition!
    Quote from Spark»

    47 :(

    That ain't so bad. Something like 90% of people are in the high 40s and low 50s. I'm in the top 26% I'm just level 54.

    This can also been seen through the rewards for the end of the season.

    • SR 0-39: 10 CPs
    • SR 40-45: 20 CPs
    • SR 46-49: 40 CPs
    • SR 50-52: 60 CPs
    • SR 53-55: 80 CPs
    • SR 56-59: 120 CPs
    • SR 60-64: 200 CPs
    • SR 65+: 300 CPs
    Posted in: General Off Topic
  • 0

    posted a message on Official Chat Thread: New Beginnings Edition!
    Quote from Spark»

    Join the club

    What competitive rank are you at? (I need validation).
    Posted in: General Off Topic
  • 0

    posted a message on Official Chat Thread: New Beginnings Edition!

    I have spent a healthy unhealthy amount of time playing Overwatch recently.

    Posted in: General Off Topic
  • 0

    posted a message on Official Chat Thread: New Beginnings Edition!
    Quote from Phrossbite»

    Dang, that looks a heckuva lot better than just downsizing it in PS and blowing it up.

    Thank you thank you.
    Posted in: General Off Topic
  • 0

    posted a message on Official Chat Thread: New Beginnings Edition!
    Quote from AJPirate»

    Huh, that's pretty neat.


    If you think that's neato, I present to you another video I made where I tried to get the computer to play the Fallout 4 theme using just instruments in the Midi file format.

    Its just spamming those piano keys like crazy...

    Posted in: General Off Topic
  • 0

    posted a message on Official Chat Thread: New Beginnings Edition!

    I have extended my program so now it can do MP4 videos. *phew*

    Here is the pixelated Fallout 4 menu background with scan lines, color reduction and pixelation.

    Posted in: General Off Topic
  • 0

    posted a message on Official Chat Thread: New Beginnings Edition!
    Quote from EL_Kurto_15»

    Who here even still plays Minecraft?


    Once in a while.
    Posted in: General Off Topic
  • 0

    posted a message on Official Chat Thread: New Beginnings Edition!
    Quote from EL_Kurto_15»

    I could do the exact same thing in 8 seconds in paint, but where is the fun in that?


    Indeed, this was a learning experience for me.
    Posted in: General Off Topic
  • 0

    posted a message on Official Chat Thread: New Beginnings Edition!
    Quote from Endergirl00»


    I find this quite suspicious. It would be pretty easy to replicate this if you shrink the image just enough.

    How exactly did you make it?




    I programmed an algorithm to produce these. Not much code needed to be used.


    import java.awt.image.BufferedImage;
    
    public class Image {
        
        private Pane[][] panes;
        private int width, height, pxWidth, pxHeight;
        
        public static final int SCALE = 16;
        public static final int COLORS = 8;
        public static final int TOLERANCE = 24;
        
        public Image(BufferedImage image) {
            this.pxWidth = image.getWidth();
            this.pxHeight = image.getHeight();
            this.width = this.pxWidth / SCALE;
            this.height = this.pxHeight / SCALE;
            
            panes = new Pane[width][height];
            for(int x = 0; x < width; x++) {
                for(int y = 0; y < height; y++) {
                    Pane pane = new Pane(SCALE, SCALE);
                    for(int i = 0; i < SCALE; i++) {
                        for(int j = 0; j < SCALE; j++) {
                            pane.setRGB(i, j, image.getRGB(x * SCALE + i, y * SCALE + j));
                        }
                    }
                    pane.average();
                    this.panes[x][y] = pane;
                }
            }
            lines();
            //outline();
        }
        
        private void lines() {
            for(int y = 0; y < height; y += 2) {
                for(int x = 0; x < width; x++) {
                    panes[x][y].setColor((Math.round((panes[x][y].getColor() >> 16 & 0xFF) * 0.85F) << 16) + (Math.round((panes[x][y].getColor() >> 8 & 0xFF) * 0.85F) << 8) + Math.round((panes[x][y].getColor() & 0xFF) * 0.85F));
                }
            }
        }
        
        private void outline() {
            int r0, g0, b0, r1, g1, b1;
            for(int k = 0; k < 1; k++) {
                for(int x = 1; x < width - 1; x++) {
                    for(int y = 1; y < height - 1; y++) {
                        Pane pane = panes[x][y];
                        r0 = pane.getColor() >> 16 & 0xFF;
                        g0 = pane.getColor() >> 8 & 0xFF;
                        b0 = pane.getColor() & 0xFF;
        
                        pane = panes[x + (k == 0 ? 1 : -1)][y];
                        r1 = pane.getColor() >> 16 & 0xFF;
                        g1 = pane.getColor() >> 8 & 0xFF;
                        b1 = pane.getColor() & 0xFF;
                        
                        if(abs(r0 - r1) > TOLERANCE && abs(b0 - b1) > TOLERANCE && abs(g0 - g1) > TOLERANCE) {
                            panes[x][y].setColor(16777216);
                        }
                    }
                }
            }
        }
        
        public BufferedImage toBufferedImage() {
            BufferedImage image = new BufferedImage(pxWidth, pxHeight, BufferedImage.TYPE_INT_RGB);
            for(int x = 0; x < width; x++) {
                for(int y = 0; y < height; y++) {
                    Pane pane = panes[x][y];
                    for(int i = 0; i < SCALE; i++) {
                        for(int j = 0; j < SCALE; j++) {
                            image.setRGB(x * SCALE + i, y * SCALE + j, pane.getColor());
                        }
                    }
                }
            }
            return image;
        }
        
        private int abs(int value) {
            return value < 0 ? -value : value;
        }
        
        public int getWidth() {
            return pxWidth;
        }
        
        public int getHeight() {
            return pxHeight;
        }
        
    }



    public class Pane {
        
        private int[][] rgb;
        private int width, height, size, color;
        
        public Pane(int width, int height) {
            this.width = width;
            this.height = height;
            this.size = width * height;
            
            rgb = new int[width][height];
        }
        
        public void average() {
            int r = 0, g = 0, b = 0;
            for(int x = 0; x < width; x++) {
                for(int y = 0; y < height; y++) {
                    r += rgb[x][y] >> 16 & 0xFF;
                    g += rgb[x][y] >> 8 & 0xFF;
                    b += rgb[x][y] & 0xFF;
                }
            }
            color = (round(r / size, Image.COLORS) << 16) + (round(g / size, Image.COLORS) << 8) + round(b / size, Image.COLORS) ;
            for(int x = 0; x < width; x++) {
                for(int y = 0; y < height; y++) {
                    this.rgb[x][y] = color;
                }
            }
        }
        
        private int round(int val, int res) {
            return Math.round(val / res) * res;
        }
        
        public int getColor() {
            return color;
        }
        
        public void setColor(int rgb) {
            this.color = rgb;
        }
        
        public void setRGB(int x, int y, int rgb) {
            this.rgb[x][y] = rgb;
        }
        
        public int getWidth() {
            return width;
        }
        
        public int getHeight() {
            return height;
        }
        
    }

    As you can see I use bit shifting and bit masking to switch to and from the RGB color space.


    It works as follow:

    1. Load image from file.
    2. Split the image into a grid of squares.
    3. Take the average color of the pixels in each grid and fill the grid with that average color.

    (Optional 4. reduce the RGB to 85% of its original on all the odd rows of the grid to make the scan lines)

    5. Save image to file.


    I'm no hack.

    Posted in: General Off Topic
  • 0

    posted a message on Official Chat Thread: New Beginnings Edition!
    Quote from Thunderhoof111»

    Looks excellent!


    It works best for images without an alpha channel and without flat colors.

    For example:


    h3h3 for life \//\

    Posted in: General Off Topic
  • 0

    posted a message on Official Chat Thread: New Beginnings Edition!
    Quote from Thunderhoof111»

    snip


    Normal pixel art.



    With scan lines:



    With edge detection (needs some work):


    Posted in: General Off Topic
  • 0

    posted a message on Official Chat Thread: New Beginnings Edition!

    Someone give me an image to turn into pixel art.

    Posted in: General Off Topic
  • 0

    posted a message on Official Chat Thread: New Beginnings Edition!
    Quote from Talco»

    You and me both. I have never understood it.

    This kind of stuff always appealed:




    Starts off slow and gets crazy fast and complex by the end.
    Posted in: General Off Topic
  • To post a comment, please or register a new account.