Вы можете использовать Pngcrush Его основное назначение - уменьшить размер потока данных PNG IDAT, пробуя различные уровни сжатия и методы фильтра PNG. Если размер ширины или длины очень велик, и вы намереваетесь нарисовать егона холсте, после создания изображения , вы можете использовать метод DrawRegion Graphics в методе рисования canvas для рисования на нем нужного фрагмента изображения. Вы можете изменить нарисованный фрагмент изображения (например, когда пользователь нажимает клавишу)путем изменения параметров метода drawRegion () и перекрасить холст:
public class CanvasButterfly extends Canvas implements ... {
private int ix, iy;
//image
private Image picture;
/*
* Constructor
*/
public CanvasButterfly() {
init();
}
/* Function : paint(Graphics)
* Description : This method is used for rendering Graphics
* Input : Graphics
* return : Void
*/
protected void paint(Graphics g) {
g.setColor(255, 255, 255);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
if (picture != null) {
g.drawRegion(picture, ix, iy,
picture.getWidth() - ix, picture.getHeight() - iy,
Sprite.TRANS_NONE, 0, 0, Graphics.TOP | Graphics.LEFT);
}
}
/* Function : moveImage(int)
* Description : This method handle Canvas events
* Input : void
* return : Void
*/
private void moveImage(int keyCode) {
int key = -1;
try {
key = getGameAction(keyCode);
} catch (Exception ex) {
key = keyCode;
}
switch (key) {
case Canvas.DOWN:
iy = Math.min(iy + 1,picture.getHeight());
break;
case Canvas.UP:
iy = Math.max(iy - 1,0);
break;
case Canvas.LEFT:
ix = Math.max(ix - 1,0);
break;
case Canvas.RIGHT:
ix = Math.min(ix + 1,picture.getWidth());
break;
}
}
//keyPressed
public void keyPressed(int keyCode) {
moveImage(keyCode);
repaint();
}
//keyRepeated
public void keyRepeated(int keyCode) {
moveImage(keyCode);
repaint();
}
/* Function : init()
* Description : This method initialized the class objects
* Input : void
* return : Void
*/
private void init() {
//
ix = ...
iy = ...
try {
picture= Image.createImage("/" + image + ".png");
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
Здесь впервые изображение, нарисованное из Coordinate (ix, iy) на холсте.