public void drawResizedImage(Image image, Graphics g, double factor, int x, int y) 
{ 
   // Zmienne oznaczające pozycje X,Y w obrazie początkowym i zmienionym. 
   int xpos,ypos; 
   int origx, origy; 

   // Pozycje w tablicy RGB. 
   int origpos, zoompos; 

   // Obliczona wielkość obrazu po zmianie. 
   int originalW = image.getWidth(); 
   int originalH = image.getWidth(); 
   int zoomW = (int) (originalW * factor); 
   int zoomH = (int) (originalH * factor); 

   // Zarezerwowanie tablicy na dane pikseli obrazu początkowego i zmienionego. 
   int [] sourceData = new int[originalW * originalH]; 
   int [] zoomData = new int[zoomW * zoomH]; 

   // Pobranie pikseli obrazu początkowego. 
   image.getRGB(sourceData, 0, originalW, 0, 0, originalW, originalH); 

   // Przetworzenie każdego piksela w obrazie docelowym.
   for (xpos=0;xpos<zoomW;xpos++) 
   { 
      for (ypos=0;ypos<zoomH;ypos++) 
      { 
         // Obliczenie odpowiadającego mu piksela w obrazie początkowym. 
         origx = (int) (xpos / factor); 
         origy = (int) (ypos / factor); 

         // Mapowanie obydwu pikseli (początkowy, zmieniony) w tablicach danych.
         origpos = origy * originalW + origx; 
         zoompos = ypos * zoomW + xpos; 

         // Przeniesienie danych pikseli z tablicy obrazu początkowego do tablicy obrazu zmienionego. 
         zoomData[zoompos] = sourceData[origpos]; 
      } 
   } 
   // Wyświetlenie wygenerowanego obrazu 
   g.drawRGB(zoomData, 0, zoomW, x, y, zoomW, zoomH, true); 
} 
