じろうの公開メモ

自分用のメモ置き場です

MIDPで画像の拡大縮小関数


/**
* 拡大用関数
* Graphics g
* Image image 拡大する画像
* int dx, dy 描画先座標
* int scaled 拡大率
* int sx, sy 描画元座標
* int width, height 描画元サイズ
*/
private void drawScaledImage1(Graphics g, Image image, int dx, int dy, int scaled,
int sx, int sy, int width, int height)
{
int w = width * scaled;
int h = height * scaled;
int[] pixels = new int[width*height];
int[] scaled_pixels = new int[w*h];
image.getRGB(pixels, 0, width, sx, sy, width, height);
for(int y = 0; y < h; y++)
{
for(int x = 0; x < w; x++)
{
scaled_pixels[x+w*y] = pixels[(x/scaled)+width*(y/scaled)];
}
}
g.drawRGB(scaled_pixels, 0, w, dx, dy, w, h, false);
}
/**
* 縮小用関数
* Graphics g
* Image image 縮小する画像
* int dx, dy 描画先座標
* int scaled 縮小率 (2で2分の1になる)
* int sx, sy 描画元座標
* int width, height 描画元サイズ
*/
private void drawScaledImage2(Graphics g, Image image, int dx, int dy, int scaled,
int sx, int sy, int width, int height)
{
int w = width / scaled;
int h = height / scaled;
int[] pixels = new int[width*height];
int[] scaled_pixels = new int[w*h];
image.getRGB(pixels, 0, width, sx, sy, width, height);
for(int y = 0; y < h; y++)
{
for(int x = 0; x < w; x++)
{
scaled_pixels[x+w*y] = pixels[(x*scaled)+width*(y*scaled)];
}
}
g.drawRGB(scaled_pixels, 0, w, dx, dy, w, h, false);
}
探してもあんまり見つからないので作ってみたが
まだ完成じゃないとおもう、まぁ試作品
完成品は今の知識では無理かな。。。
端と端を揃えたり、縦横の均等割り付け的なことをうんちゃらかんちゃらしないといけないんだろうな

setFrame関数


public void setFrame(int sequenceIndex)フレーム・シーケンス中の現在のフレームを選択します。
paint(Graphics) メソッドが呼ばれたときに現在のフレームがレンダリングされます。
提供されたインデックスは、実際のフレームそのもののインデックスではなく、フレーム・シーケンス中の希望のエントリを示します。

フレームシーケンスの項を見れば図で分かるね