Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > hr.comp.programiranje.java > #10

Citanje color offset-a za svaki pixel u indexed color .bmp file-u?

From Chupo <bad_n_mad@yahoo.com>
Newsgroups hr.comp.programiranje, hr.comp.programiranje.java
Subject Citanje color offset-a za svaki pixel u indexed color .bmp file-u?
Date 2017-07-10 05:46 +0200
Organization Noname d.o.o.
Message-ID <MPG.33cd16eca862579f98af9d@news.t-com.hr> (permalink)

Cross-posted to 2 groups.

Show all headers | View raw


Ukratko:

Da li u Java-i postoji mehanizam za citanje color offset-a za svaki 
pojedinacni pixel u indexed color .bmp file-u?

Opsirnije:

Napravio sam generiranje tile i sprite ROM file-ova za Pac-Man hardware 
koji kao ulaz uzima 4 bpp (16 color) .bmp file. Pac-Man hardware ima 
tile-ove i sprite-ove definirane s 2 bita po pixelu ali s obzirom da ne 
postoji 2 bpp .bmp koristim 4 bpp .bmp file u kojem sam definirao samo 
prva 4 unosa za paletu.

Problem je jer za citanje boje pixela koristim getRGB() metodu pa sam 
boje morao hardkodirati. Kada bih umjesto RGB komponenti za pojedini 
pixel mogao procitati offset u color paleti, onda boje ne bi morale 
biti hardkodirane pa bi program radio s .bmp file-ovima koji su 
nacrtani korisnjem bilo koje 4 boje.

Da li u Java-i postoje neke motode s kojima bi mogo doci do offset-a na 
color paletu koji opisuje svaki pixel ili je jedini nacin da citam .bmp 
file header i raspakiram pixel array?

Trenutno sam u .bmp file-u na offset-u 0x36 (color paleta) stavio:

00000036h: 00 00 00 00 FF FF FF 00 00 00 FF 00 FF 00 00 00

To su 4 boje, svaka boja je opisana s 4 byte-a u formatu BGRA pa je to:

0x00	crna
0x01	bijela
0x02	plava
0x03	crvena

Ako za crtanje koristim te 4 boje onda mogu na osnovu RGB vrijednosti 
pixela odrediti offset u toj paleti, ali ako bi htio koristiti neke 
druge 4 boje onda bih morao mijenjati program pa mi zato umjesto 
citanja RGB vrijednosti pixela treba citanje offset-a u color paleti.

Program koji radi s hardkodiranim vrijednostima izgleda ovako:

package pacman;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;

import javax.imageio.ImageIO;

// Reads tile.bmp, generates raw output.bin and overwrites the
// first 16 bytes in pacman.5e ROM file with the same 16 bytes

public class Tilegen {

    // returns byte describing 4 pixel column at position i
    // i = 0 --> down-right, i = 15 --> up-left
    public static int get4px(int i, int data[][]) {
        int x;
        int y;
        int  out = 0;

        x = 7 - (i % 8);        // x coord in array
        y = 7 - (i / 8)*4;      // y coord in array

        // bits 0 & 4 (bit 0 and bit 1 shifted to position 4)
        out |= (data[x][y] & 0x01) | ((data[x][y] & 0x02) << 3);
        // bits 1 & 5 (bit 0 shifted to position 1 and bit 1 shifted to 
position 5)
        out |= ((data[x][y-1] & 0x01) << 1) | ((data[x][y-1] & 0x02) 
<< 4);
        // bits 2 & 6 (bit 0 shifted to position 2 and bit 1 shifted to 
position 6)
        out |= ((data[x][y-2] & 0x01) << 2) | ((data[x][y-2] & 0x02) 
<< 5);
        // bits 3 & 7 (bit 0 shifted to position 3 and bit 1 shifted to 
position 7)
        out |= ((data[x][y-3] & 0x01) << 3) | ((data[x][y-3] & 0x02) 
<< 6);

        return out;
    }

    public static void main(String[] args) throws IOException {
        final File file = new File("tile.bmp");             // 8x8 .bmp 
file (4 of 16 colors used)
        final BufferedImage image = ImageIO.read(file);
        final FileOutputStream outfile = new FileOutputStream
("output.bin");    // output hex file
        final File romfile = new File("pacman.5e");         // ROM file
        final RandomAccessFile tilerom = new RandomAccessFile(romfile, 
"rw");
        tilerom.seek(0L);

        int data[][] = new int[8][8];       // to store pixel data
        int out;

        for (int y=0; y < image.getHeight(); y++) {
            for (int x=0; x < image.getWidth(); x++) {
                final int color = image.getRGB(x, y);
                final int red = ((color & 0x00ff0000) >> 16);   // 
removing ( ) breaks auto indentation in Eclipse!?
                final int green = ((color & 0x0000ff00) >> 8);  // 
removing ( ) breaks auto indentation in Eclipse!?
                final int blue = color & 0x000000ff;

                if ((red == 0xff) && (green == 0xff) && (blue == 0xff)) 
{
                    //System.out.print("1 ");       // white is 1
                    out = 1;
                } else if (red == 0xff) {
                    //System.out.print("3 ");       // red is 3
                    out = 3;
                } else if (blue == 0xff) {
                    //System.out.print("2 ");       // blue is 2
                    out = 2;
                } else {
                    //System.out.print("0 ");       // black is 0
                    out = 0;
                }
                System.out.print(out + " ");
                data[x][y] = out & 0xff;
            }
            System.out.println();
        }

        System.out.println();
        // map data to ROM file format
        for (int i=0; i < 16; i++) {
            out = get4px(i, data);
            System.out.println(out + " ");
            outfile.write(out);
            tilerom.write(out);         // change byte in the ROM file
        }

        tilerom.close();
        outfile.close();
    } // main
} // class

Jos opsirnije:

https://stackoverflow.com/q/44991780/1324175
-- 
Let There Be Light
Custom LED driveri prema specifikacijama
http://tinyurl.com/customleddriver

Chupo

Back to hr.comp.programiranje.java | Previous | NextNext in thread | Find similar


Thread

Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-10 05:46 +0200
  Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-10 14:16 +0200
    Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-10 15:18 +0200
      Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-12 09:32 +0200
        Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-12 23:08 +0200
          Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-14 11:25 +0200
            Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-14 11:27 +0200
            Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-14 15:09 +0200
              Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-14 16:22 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-14 17:21 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-16 11:37 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-16 15:20 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-17 12:36 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-18 00:37 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-18 17:23 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-19 01:10 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-19 15:14 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-19 16:21 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Nikolaj Lazic <nlazicBEZ_OVOGA@mudrac.ffzg.hr> - 2017-07-19 17:08 +0000
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-20 18:04 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-20 19:17 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-20 20:42 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-21 03:58 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-21 05:14 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-21 12:04 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-21 17:24 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-08-04 13:10 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-08-04 17:21 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-08-07 17:30 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-08-07 18:30 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-08-07 18:35 +0200
        Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-16 01:04 +0200
          Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-16 11:32 +0200

csiph-web