🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.java
Article #153676

Re: blitter pod java

#153676
From: TrzyLinie
Date: Wed, 28 Nov 2012 09:38
115 lines
4360 bytes
W dniu 2012-11-27 17:52, obi wan firthe kenobi napisał(a):
> a masz moze jakis working example ntt?

import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;

public class Pixels extends Frame implements Runnable {

	private ColorModel cm = null;
	private WritableRaster wr = null;
	private static int sx = 500, sy = 300;
	private int samples[] = new int [sx * sy];
	private Image im = null;
	
	Pixels(String title) {
		super(title);
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent we) {
				System.exit(1);
			}
		});
		pack();
	}
	
	public Dimension getPreferredSize() {
		return new Dimension(sx, sy);
	}
	
	public void addNotify() {
		super.addNotify();
		cm = ColorModel.getRGBdefault();
		wr = cm.createCompatibleWritableRaster(sx, sy);
	}
	
	public void run() {
		while (true) {
			prepareRandomImage();
			repaint();
			try {
				Thread.sleep(30);
			} catch (InterruptedException ignore) {
			}
		}
	}
	
	private void prepareRandomImage() {
		prepareRandomSamples();
		wr.setSamples(0, 0, sx, sy, 0, samples); // R
		prepareRandomSamples();
		wr.setSamples(0, 0, sx, sy, 1, samples); // G
		prepareRandomSamples();
		wr.setSamples(0, 0, sx, sy, 2, samples); // B
		prepareStillSamples(255);
		wr.setSamples(0, 0, sx, sy, 3, samples); // alfa
		im = new BufferedImage(cm, wr, false, null);
	}
	
	private void prepareRandomSamples() {
		for (int i = 0; i < samples.length; i++) {
			samples[i] = (int)(Math.random() * 256);
		}
	}
	private void prepareStillSamples(int s) {
		for (int i = 0; i < samples.length; i++) {
			samples[i] = s;
		}
	}
	
	public void update(Graphics g) { // to AWT, więc bez migotania pls
		paint(g);
	}
	
	public void paint(Graphics g) {
		g.drawImage(im, 0, 0, this);
	}
	
	public static void main(String[] args) {
		Pixels p = new Pixels("Pixels");
		p.setVisible(true);
		new Thread(p).start();
	}
}

> prawie nie znam javoskiego api i juz zdolalem sie pogubic w 50ciu wersjach streamow imagow i bufferow i ich 2500 mozliwych kombinacjach

Powyższy przykład niewiele Ci zatem pomoże...

> nie wiem tez co wpisa w google

Każdą nazwę klasy z powyższego.

> poszukuje efektywnej metody wywalania tablicy pixeli[][] na okno w petli

Powyższe nie jest efektywne. Zakłada jakąś organizację danych pikselowych,
nieefektywną, ale taka mi przyszła jako pierwsza do głowy.

> znalazlem ze mozna to zrobic
>
>   pixels[][] -> MiemoryImageSource -> Image -> drawImage
>
> ale jako ze mam to odpalac w petli nreowanie
> i nieszczenie tych posrednich dwu opakowan jest troche watpliwe mz

W Javie nie jest wątpliwe... Powyższy przykład (u mnie) powiększa obciążenie procka
o 2-5%, a jest beznadziejnie głupi ;)

-- 
TrzyLinie
Technical Details
Message-ID: <k94m30$gqg$1@dont-email.me>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.supermedia.pl!plix.pl!newsfeed2.plix.pl!feed.xsnews.nl!border-3.ams.xsnews.nl!ecngs!feeder2.ecngs.de!feeder.erje.net!eu.feeder.erje.net!eternal-september.org!feeder.eternal-september.org!mx04.eternal-september.org!.POSTED!not-for-mail
References: <af2cbccf-c4a3-48bc-b038-da0602ff06be@googlegroups.com> <k92chs$6il$1@dont-email.me> <6fce81bb-3e66-435e-b503-34b8a9ea2e4d@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.supermedia.pl!plix.pl!newsfeed2.plix.pl!feed.xsnews.nl!border-3.ams.xsnews.nl!ecngs!feeder2.ecngs.de!feeder.erje.net!eu.feeder.erje.net!eternal-september.org!feeder.eternal-september.org!mx04.eternal-september.org!.POSTED!not-for-mail
From: TrzyLinie <trzyKASUJlinie@USUNo2.pl>
Newsgroups: pl.comp.lang.java
Subject: Re: blitter pod java
Date: Wed, 28 Nov 2012 10:38:40 +0100
Organization: A noiseless patient Spider
Lines: 115
Message-ID: <k94m30$gqg$1@dont-email.me>
References: <af2cbccf-c4a3-48bc-b038-da0602ff06be@googlegroups.com> <k92chs$6il$1@dont-email.me> <6fce81bb-3e66-435e-b503-34b8a9ea2e4d@googlegroups.com>
Mime-Version: 1.0
Injection-Date: Wed, 28 Nov 2012 09:38:41 +0000 (UTC)
Injection-Info: mx04.eternal-september.org; posting-host="01c1cdd8e1becd4e3c1f30adb6a1e0ea"; logging-data="17232"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18mffYU7LAmrHVxADX36ZcN/eIpO9Adg/4="
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/17.0 Thunderbird/17.0
In-Reply-To: <6fce81bb-3e66-435e-b503-34b8a9ea2e4d@googlegroups.com>
Cancel-Lock: sha1:qEjd7hD8LU/o/9xDcAa0MMZZn2o=
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit