Article View: pl.comp.lang.java
Article #153673Re: blitter pod java
From: obi wan firthe kenobi
Date: Wed, 28 Nov 2012 10:37
Date: Wed, 28 Nov 2012 10:37
268 lines
6186 bytes
6186 bytes
W dniu środa, 28 listopada 2012 10:38:40 UTC+1 użytkownik TrzyLinie napisał:
> 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 ;)
>
>
ok, tnx, popatrze na ten kod i pozniej jeszcze
odpowiem (ale jest ciekawy bo wlasnie sie
zastanawialem nad drobiazgami typu jak machnac
idle_loop w javie albo skad wziac rand() itp
(w c umiem kodowac w miare dobrze ale java
to dla mnie swoisty obszar nowosci)
ktory powyższy przykład? ten ktory ja podalem?
zrobilem pozniej cos takiego
public void update()
{
for(int i=0; i<200*200;i++)
{
pixels[i] = pixels[i] + 100;
}
source = new MemoryImageSource(200, 200, pixels, 0, 50);
image = createImage(source);
repaint();
}
public void paint(Graphics g)
{
g.drawImage(image, 0, 0, this);
}
plus 100 z powodu braku informacji jak tam
uzyc randa ;-) I to dziala tylko zastanawiam sie, czy jako ze to nie niszczy memory image source i image czy to nie obciaza systemu
(jakies dlugie kolejki instancji do garbage collectora itp) Obciaza o 2% ale na sleepie 30 ms ciekawre jakby to wydalalo jakby poscic na full - ile fps - wlasnie mw taki test chce wykonac
Technical Details
Message-ID:
<1a9cada4-6f58-4e20-bf2c-66b3ef0bf1d1@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!i9no11865496qap.0!news-out.google.com!gf5ni28695207qab.0!nntp.google.com!i9no11950128qap.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<af2cbccf-c4a3-48bc-b038-da0602ff06be@googlegroups.com> <k92chs$6il$1@dont-email.me> <6fce81bb-3e66-435e-b503-34b8a9ea2e4d@googlegroups.com> <k94m30$gqg$1@dont-email.me>Show Full Headers
Complete Article Headers
Received: by 10.224.111.140 with SMTP id s12mr12004244qap.5.1354099077135; Wed, 28 Nov 2012 02:37:57 -0800 (PST) Received: by 10.49.87.1 with SMTP id t1mr3762101qez.41.1354099077116; Wed, 28 Nov 2012 02:37:57 -0800 (PST) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!i9no11865496qap.0!news-out.google.com!gf5ni28695207qab.0!nntp.google.com!i9no11950128qap.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.java Date: Wed, 28 Nov 2012 02:37:56 -0800 (PST) In-Reply-To: <k94m30$gqg$1@dont-email.me> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=91.94.193.53; posting-account=Sb6m8goAAABbWsBL7gouk3bfLsuxwMgN NNTP-Posting-Host: 91.94.193.53 References: <af2cbccf-c4a3-48bc-b038-da0602ff06be@googlegroups.com> <k92chs$6il$1@dont-email.me> <6fce81bb-3e66-435e-b503-34b8a9ea2e4d@googlegroups.com> <k94m30$gqg$1@dont-email.me> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <1a9cada4-6f58-4e20-bf2c-66b3ef0bf1d1@googlegroups.com> Subject: Re: blitter pod java From: obi wan firthe kenobi <profesor.fir@gmail.com> Injection-Date: Wed, 28 Nov 2012 10:37:57 +0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit