J2ME - Kopiowanie do Image czesci innego obrazu.

0

Witam.

Chcialem najlepiej na platformie MidP1. Skopiowac do IMAGE czesc innego IMAGE ;)

Dokladniej chodzi o to, ze:

Image GLOWNE = getImage("/Glowne.png");
Image NOWE = createImage(100, 100);

Graphics g;
g = NOWE.getGraphics();


// I teraz chce na NOWE narysowac wycinek GLOWNE - ale sie zacinam nie wiem za bardzo jakich metod uzywac i nic sensownego nie moge wymyslic :/

Pozdraiwam

0

skorzystaj z funkcji drawRegion

javax.​microedition.​lcdui.​Graphics
public void drawRegion(Image src, int x_src, int y_src, int width, int height, int transform, int x_dest, int y_dest, int anchor)

Copies a region of the specified source image to a location within the destination, possibly transforming (rotating and reflecting) the image data using the chosen transform function.
The destination, if it is an image, must not be the same image as the source image. If it is, an exception is thrown. This restriction is present in order to avoid ill-defined behaviors that might occur if overlapped, transformed copies were permitted.

Parameters:
src - the source image to copy from
x_src - the x coordinate of the upper left corner of the region within the source image to copy
y_src - the y coordinate of the upper left corner of the region within the source image to copy
width - the width of the region to copy
height - the height of the region to copy
transform - the desired transformation for the selected region being copied
x_dest - the x coordinate of the anchor point in the destination drawing area
y_dest - the y coordinate of the anchor point in the destination drawing area
anchor - the anchor point for positioning the region within the destination image

Skopiowałem fragmenty z dokumentacji

0

DrawRegion rysuje na Graphics czesc obrazka (i tylko od midp2.0 ale to juz mniejszy problem). Ja chcialem natomiast narysowac na innym obrazku. Chyba, ze z Graphic da sie zapisac do Image ?

0

Noo, przecież Graphics uzskujesz za pomocą metody Image.getGraphics();

Ale jeżeli faktycznie zależy Ci na użyciu MIDP 1.0 sam możesz zaimplementować podobną metodę:

public void paste(Image image, int x, int y, int width, int height, Image into, int x2, int y2) {
  Graphics g = into.getGraphics();
  g.setClip(x2, y2, width, height);
  g.drawImage(image, x2-x, y2-y, Graphics.LEFT|Graphics.TOP);
}

Argumenty:

  • image - Obrazek, który chcemy wyciąć;
  • x - Lewy, górny róg od którego zaczynamy wycinanie (na osi X);
  • y - Jw. (na osi Y);
  • width - Szerokość wycinanego obszaru;
  • height - Wysokość wyciananego obszaru;
  • into - Obrazek do którego wklejamy wycinek;
  • x2 - Lewy, górny róg od którego zaczynamy wklejanie (na osi X);
  • y2 - Jw. (na osi Y).

Przykład:

Jeżeli chcesz wyciąć fragment 20x30 obrazka, zaczynając od punktu o współrzędnych (5, 15) i wkleić go tak by jego lewy górny róg znajdował się na współrzędnych (40, 40) nowego obrazka, użyj takiego kodu:

Image GLOWNE = getImage("/Glowne.png");
Image NOWE = createImage(100, 100);
paste(GLOWNE, 5, 15, 20, 30, NOWE, 40, 40);

Pozdrawiam, Towe.

0

Dziekuje za rozwiazanie!

Dopiero sie ucze J2ME i to z internetu wiec nie widzialem o czyms tak podstawowym jak: Graphics.setClip(..);

Dodatkowo mam pytanie - czy gdy Obraz GLOWNY bedzie zapisany w formacie PNG to takie przerysowanie tez bedzie uwzgledniac przezroczystosci ?

0

Z tego co wiem, powienien.

0
towe napisał(a)

Z tego co wiem, powienien.

To nie zostje mi nic innego jak zakodzic i sprawdzic :P :)

0

Mam problem bo emulator wywala mi blad w postaci IO.Exception

Oto fragment kodu kod:

public class MIDPCanvas extends Canvas implements Runnable, CommandListener {


    Thread runner;
    Timer t1 = new Timer();
    Image img;
    int offset[] = new int[10];
   // Text cz1 = new Text("ABCDEFGHIJKLMNOPRSTUWXYZ", offset, 5, img);


    public MIDPCanvas() throws IOException {
        
        if (runner == null) {
            runner = new Thread(this);
            runner.start();
        }

    img = Image.createImage("/obraz.png"); // <- GDY TO JEST W KOMENCIE TO PROBLEM ZNIKA !!!!
    
    for (int i=0; i<10; i++)
    offset[i]=i*10;

Nie wiem w co to trzeba obramowac aby nie byla bledu - generalnie chce wczytac obraz.ong do img ;) Mhh jak to dodac do jara ? :)

0

NetBeans 6.5 ;)

0

Funkcja Image.createImage(String name) wyrzuca wyjątek IOException jeśli wczytywany obraz nie istnieje, nie może być wczytany lub nie można go odkodować. W tej sytuacji chodzi najpewniej o to pierwsze - żeby przechwycić wyjątek użyj takiego kodu:

Image myImage = null;
try {
  image = Image.createImage("/obrazek.png");
} catch (IOException e) {
  // Tutaj piszesz co program ma zrobić, gdy nie może pobrać obrazka, np.:
  System.out.println("Nie można wczytać obrazka: "+e.getMessage());
  return;
}

Sam obrazek musisz wrzucić do odpowiedniego folderu - w Wireless Toolkit ten folder to /res, ale w NetBeans nie wiem (pewnie podobnie).

0

Tak w NetBeans 6.5 ten folder to src ;0

Wystap[il u mnie nastepny problem - W NetBeans 6.5 mam projekt jako Cldc 1.0 i MidP1 kompiluje i wszystko ladnie smiga - na emulatroze elegancko dziala.. Na komorce mhh.. np. na sagemi my-x62 czy noki e65 albo SE k300 dziala super.. (Tylko ze te telefony to MidP2). Natomiast jak programik wrzucilem na telefon typu Nokia S40midP1, albo na S60MidP1 (Ngage) to nie dziala. Na Ngage podczas scigania wywala blad :(..

Nie wiem co jest tego powodem :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1