Przepisanie fotki do tablicy Bajtow

0

Witam

Chce zrobic applet na ktorym widnieje falujaca flaga, pomysl jest taki wczytuje fotke flagi, przepisuje fotke do tablicy bajtow (mapa bitowa w pamieci), nastepnie kazdy barwny bajt tej tablicy przesowam o pewna wartosc x,y tak zeby uzystak efekt falowania (na to mam wzor - jakas mutacja funkcji sinus()).
Moj problem polega na tym ze nie wiem jak przepisac zaladowany obrazek do tablicy bajtow.

probowalem czegos takiego

import java.awt.*;
import java.applet.*;
import javax.swing.JOptionPane;


public class Obrazek extends Applet 
{
	Image obrazek;
	byte tabObrazek[];
	
	public void init() 
	{
		obrazek = getImage(getCodeBase(), "Flaga.gif"); //ladowanie obrazka z pliku
		byte[] tabObrazek = new byte[480*256];
		if (tabObrazek==null)
			{
				JOptionPane.showInternalMessageDialog(null, "Alokacja pamieci nie powiodla sie");
			}
	}
	
	public void start()
		{
			tabObrazek=obrazek.toString().getBytes();
		}

	public void paint(Graphics g) 
		{
	
		}
}

Niestety java sypie wyjatatkami jak z rekawa

0

// prosze skasowac ten post :)

0
/**
* zwraca tablice bajtow z obrazka
* plik musi znajdowac sie w katalogu klasy
*/

byte[] parseImage(String im)
{
	File img = new File(im);
	byte[] content = new byte[(int)(img.length())];
	
	try {	
		DataInputStream in = new DataInputStream(
			new FileInputStream(img));
	
		in.read(content);
		in.close();
	}
	catch (Exception e)
	{
		System.out.println("Blad odczytu obrazka " + im);
	}
	
	return content;
}

proste i przyjemne ;)

0

Proste, ale tylko pozornie bo teraz mam w pamieci bitmapke + naglowek, sam musze zajac sie jego obsluga, odczytac gdzie znajduje sie obszar danych, iloma bitami jest kodowany jeden punkt obrazka, czy bitmapa ma palete. Myslalem ze moze java oferuje jakas klase ktora sie tym zajmie, a w pamieci umiesci sam obszar danych bitmapy.

W kazdym razie dzieki za pomoc

0

Java posiada klasę BufferedImage
tworzy ona bufor w którym zostaje umieszczony obrazek

Image img;
BufferedImage bufor=(BufferedImage)createImage(img.getWidth(null),img.getHeight(null));
Graphics gDC=bufor.getGraphics();
gDC.drawImage(img,0,0,img.getWidth(null),img.getHeight(null),null);
gDC.dispose();

w tym momencie w bufor masz bitmapę z Image

aby pobrac pixel używasz bufor.getRGB(int x, int y)
aby zapisać używasz bufor.setRGB(int x, int y, int wartość)

wartości są to liczby 4 bajtowe (Alpha(przezroczystość) oraz składowe R G B)

1 użytkowników online, w tym zalogowanych: 0, gości: 1