Autor Wątek: Pyt z Javy (2)  (Przeczytany 4619 razy)

Offline Shusty

  • Użytkownik

# Listopad 28, 2012, 20:17:05
W Javie nie podasz całej tablicy, żeby ją ot tak zblitować. Tworzysz nowy obiekt, który ma w środku tablicę i który możesz narysować sobie. Jednak nie masz dostępu bezpośrednio do tablicy, więc iterujesz sobie wygodnie, ale używając setterów i getterów. W następnej klatce nie tworzysz nowego obiektu, tylko korzystasz z już istniejącego i zmieniasz ponownie w pętli wewnętrzną tablicę obiektu i go rysujesz.

Mam nadzieję, że zrozumiałeś, że obiekt do tego celu wystarczy stworzyć tylko raz i go potem modyfikować i rysować.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline rhdbisgrt

  • Użytkownik

# Listopad 28, 2012, 20:47:40
W Javie nie podasz całej tablicy, żeby ją ot tak zblitować. Tworzysz nowy obiekt, który ma w środku tablicę i który możesz narysować sobie. Jednak nie masz dostępu bezpośrednio do tablicy, więc iterujesz sobie wygodnie, ale używając setterów i getterów. W następnej klatce nie tworzysz nowego obiektu, tylko korzystasz z już istniejącego i zmieniasz ponownie w pętli wewnętrzną tablicę obiektu i go rysujesz.

Mam nadzieję, że zrozumiałeś, że obiekt do tego celu wystarczy stworzyć tylko raz i go potem modyfikować i rysować.

A jak go modyfikujesz? Wystarczy zmienic zawartosc pixels i nic nie robic czy jest jakas metoda do zmianiania zawartosci image (tj pixels) ? Troche sie w tym pogubilem bo nie jestem otrzaskany z jawa i takimi api (troche ale nie calkiem)


Offline Shusty

  • Użytkownik

# Listopad 28, 2012, 21:42:50
buf.setRGB( x, y, color2.getRGB() );  // twój odpowiednik setPixel



buf - BufferedImage, ale może być co innego też
x,y - twoje zmienne z fora (indeksy)
color2 - obiekt typu Color



A jakbyś się bardzo chciał zagłębić w detale tej metody:

// Method descriptor #43 (III)V
  // Stack: 6, Locals: 4
  public synchronized void setRGB(int arg0, int arg1, int arg2);
     0  aload_0 [this]
     1  getfield java.awt.image.BufferedImage.raster : java.awt.image.WritableRaster [431]
     4  iload_1 [arg0]
     5  iload_2 [arg1]
     6  aload_0 [this]
     7  getfield java.awt.image.BufferedImage.colorModel : java.awt.image.ColorModel [430]
    10  iload_3 [arg2]
    11  aconst_null
    12  invokevirtual java.awt.image.ColorModel.getDataElements(int, java.lang.Object) : java.lang.Object [467]
    15  invokevirtual java.awt.image.WritableRaster.setDataElements(int, int, java.lang.Object) : void [512]
    18  return

 
  // Method descriptor #48 (IIII[III)V
  // Stack: 4, Locals: 13
  public void setRGB(int arg0, int arg1, int arg2, int arg3, int[] arg4, int arg5, int arg6);
     0  iload 6 [arg5]
     2  istore 8
     4  aconst_null
     5  astore 10
     7  iload_2 [arg1]
     8  istore 11
    10  iload 11
    12  iload_2 [arg1]
    13  iload 4 [arg3]
    15  iadd
    16  if_icmpge 85
    19  iload 8
    21  istore 9
    23  iload_1 [arg0]
    24  istore 12
    26  iload 12
    28  iload_1 [arg0]
    29  iload_3 [arg2]
    30  iadd
    31  if_icmpge 72
    34  aload_0 [this]
    35  getfield java.awt.image.BufferedImage.colorModel : java.awt.image.ColorModel [430]
    38  aload 5 [arg4]
    40  iload 9
    42  iinc 9 1
    45  iaload
    46  aload 10
    48  invokevirtual java.awt.image.ColorModel.getDataElements(int, java.lang.Object) : java.lang.Object [467]
    51  astore 10
    53  aload_0 [this]
    54  getfield java.awt.image.BufferedImage.raster : java.awt.image.WritableRaster [431]
    57  iload 12
    59  iload 11
    61  aload 10
    63  invokevirtual java.awt.image.WritableRaster.setDataElements(int, int, java.lang.Object) : void [512]
    66  iinc 12 1
    69  goto 26
    72  iinc 11 1
    75  iload 8
    77  iload 7 [arg6]
    79  iadd
    80  istore 8
    82  goto 10
    85  return
« Ostatnia zmiana: Listopad 28, 2012, 23:11:29 wysłana przez Shusty »