Thread View: pl.comp.lang.java
6 messages
6 total messages
Started by obi wan firthe kenobi
Tue, 27 Nov 2012 12:08
blitter pod java
Author: obi wan firthe kenobi
Date: Tue, 27 Nov 2012 12:08
Date: Tue, 27 Nov 2012 12:08
7 lines
1145 bytes
1145 bytes
Troche slabo znam jave (aczkolwiek costam znam) czy jest w javie mozliwosc wygenerowania obrazu w postaci dwuwymiarowe tablicy kolorow po czym 'blitniecia' tego do okna? Chodzi mi przy tym o standartowe api jak awt/swing.. tnx
Re: blitter pod java
Author: TrzyLinie
Date: Tue, 27 Nov 2012 12:43
Date: Tue, 27 Nov 2012 12:43
13 lines
1716 bytes
1716 bytes
W dniu 2012-11-27 13:08, obi wan firthe kenobi napisał(a): > Troche slabo znam jave (aczkolwiek costam znam) > czy jest w javie mozliwosc wygenerowania obrazu > w postaci dwuwymiarowe tablicy kolorow po czym > 'blitniecia' tego do okna? Chodzi mi przy tym > o standartowe api jak awt/swing.. Np. http://docs.oracle.com/javase/7/docs/api/java/awt/image/WritableRaster.html i metody setPixel/setPixels i potem http://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html -- TrzyLinie
Re: blitter pod java
Author: obi wan firthe kenobi
Date: Tue, 27 Nov 2012 16:52
Date: Tue, 27 Nov 2012 16:52
37 lines
2499 bytes
2499 bytes
W dniu wtorek, 27 listopada 2012 13:43:41 UTC+1 użytkownik TrzyLinie napisał: > W dniu 2012-11-27 13:08, obi wan firthe kenobi napisał(a): > > > Troche slabo znam jave (aczkolwiek costam znam) > > > czy jest w javie mozliwosc wygenerowania obrazu > > > w postaci dwuwymiarowe tablicy kolorow po czym > > > 'blitniecia' tego do okna? Chodzi mi przy tym > > > o standartowe api jak awt/swing.. > > > > Np. http://docs.oracle.com/javase/7/docs/api/java/awt/image/WritableRaster.html > > i metody setPixel/setPixels i potem > > http://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html > > a masz moze jakis working example ntt? prawie nie znam javoskiego api i juz zdolalem sie pogubic w 50ciu wersjach streamow imagow i bufferow i ich 2500 mozliwych kombinacjach nie wiem tez co wpisa w google poszukuje efektywnej metody wywalania tablicy pixeli[][] na okno w petli 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
Re: blitter pod java
Author: TrzyLinie
Date: Wed, 28 Nov 2012 09:38
Date: Wed, 28 Nov 2012 09:38
115 lines
4360 bytes
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
Re: blitter pod java
Author: 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
Re: blitter pod java
Author: TrzyLinie
Date: Wed, 28 Nov 2012 12:39
Date: Wed, 28 Nov 2012 12:39
17 lines
1843 bytes
1843 bytes
W dniu 2012-11-28 11:37, obi wan firthe kenobi napisał(a): > ktory powyższy przykład? ten ktory ja podalem? Nie, Ty nie podałeś żadnego przykładu... Cały czas mam na myśli mój przykład. > public void update() Nieszczęśliwa nazwa... Bo update(Graphics) to jedna z metod java.awt.Component > Obciaza o 2% ale na sleepie 30 ms ciekawre jakby to wydalalo jakby poscic na full - ile fps - wlasnie mw taki test chce wykonac Bez sleep obciąży 100/n, n - liczba wątków procka. -- TrzyLinie
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads