Java-программирование (1-ые посты) 31.07.2013 / 18:27 | | Magatino Администратор Сейчас: Offline
Имя: Alexandr Откуда: Где Ленин родился. Simbirsk City Регистрация: 28.01.2011
| vl@volk, 2.5D , для шутера спрашиваю |
31.07.2013 / 18:27 | | gost6678 Пользователь
| TIMUR, воспользуйся методом масштабирования: http://annimon.com/code/?act=view&id=2653 Изменено gost6678 (31.07 / 18:28) (всего 1 раз) |
31.07.2013 / 18:29 | | vl@volk Пользователь Сейчас: Offline
Имя: Владислав Откуда: Земля Регистрация: 26.12.2012
| TIMUR, /**
* изменяет масштаб картинки
* @param img картинка
* @param newWidth новая ширина
* @param newHeight новая высота
* @return отмасштабированная картинка
*/
public static Image resize(Image img, int newWidth, int newHeight)
{
int imageWidth = img.getWidth();
int imageHeight = img.getHeight();
if (newWidth < 0 && newHeight > 0)
newWidth = imageWidth * newHeight / imageHeight;
else if (newWidth > 0 && newHeight < 0)
newHeight = imageHeight * newWidth / imageWidth;
else if (newWidth < 0 && newHeight < 0)
throw new IllegalArgumentException("Negative width and height");
int[] arrayOld = new int[imageWidth * imageHeight];
int[] arrayNew = new int[newWidth * newHeight];
img.getRGB(arrayOld, 0, imageWidth, 0, 0, imageWidth, imageHeight);
for (int y = 0; y < newHeight; y++)
for (int x = 0; x < newWidth; x++)
arrayNew[x + newWidth * y] = arrayOld[x * imageWidth / newWidth + imageWidth * (y * imageHeight / newHeight)];
return Image.createRGBImage(arrayNew, newWidth, newHeight, true);
}
__________________
знает толк |
31.07.2013 / 18:31 | | gost6678 Пользователь
| vl@volk, можно и так. |
31.07.2013 / 21:32 | | Misha Пользователь Сейчас: Offline
Имя: Миша Регистрация: 02.03.2012
| TIMUR, я пользуюсь этим: Открыть спойлер Закрыть спойлер public static Image resize_image(Image image, int i, int j)
{
int ai[] = new int[image.getWidth() * image.getHeight()];
image.getRGB(ai, 0, image.getWidth(), 0, 0, image.getWidth(), image.getHeight());
int ai1[] = reescalaArray(ai, image.getWidth(), image.getHeight(), i, j);
Image image1 = Image.createRGBImage(ai1, i, j, true);
return image1;
}
private static int[] reescalaArray(int ai[], int i, int j, int k, int l)
{
int ai1[] = new int[k * l];
for(int i1 = 0; i1 < l; i1++)
{
int j1 = (i1 * j) / l;
for(int k1 = 0; k1 < k; k1++)
{
int l1 = (k1 * i) / k;
ai1[k * i1 + k1] = ai[i * j1 + l1];
}
}
return ai1;
}
например - Image Img = resize_image(OldImg,50,50); |
31.07.2013 / 23:17 | | NaruTrey Пользователь Сейчас: Offline
Имя: Андрей K. Откуда: Тольятти Регистрация: 15.01.2010
| А я вообще использовал бикубическую интерполяцию, тырнул код с UniFM.
__________________
Чёрные усы кричает этот свисть |
1.08.2013 / 07:46 | | aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| NaruTrey, и зачем? Вот вам самые известные методы изменения размера картинки http://annimon.com/download/index.php?act=view&id=393 __________________
let live |
1.08.2013 / 13:20 | | DominaN Пользователь Сейчас: Offline
Имя: Кирилл Откуда: Смоленск Регистрация: 28.09.2011
| public final static Image resizeImage(Image img, int w2, int h2) {
int w = img.getWidth(), h = img.getHeight();
if (w == w2 && h == h2) return img;
int[] pixels = new int[w * h], temp = new int[w2 * h2];
img.getRGB(pixels, 0, w, 0, 0, w, h);
int a, b, c, d, x, y, index;
float x_ratio = ((float) (w - 1)) / w2;
float y_ratio = ((float) (h - 1)) / h2;
float x_diff, y_diff, blue, red, green, alpha;
int offset = 0;
for (int i = 0; i < h2; i++) {
for (int j = 0; j < w2; j++) {
x = (int) (x_ratio * j);
y = (int) (y_ratio * i);
x_diff = (x_ratio * j) - x;
y_diff = (y_ratio * i) - y;
index = (y * w + x);
a = pixels[index];
b = pixels[index + 1];
c = pixels[index + w];
d = pixels[index + w + 1];
alpha = ((a >> 24) & 0xff) * (1 - x_diff) * (1 - y_diff) + ((b >> 24) & 0xff) * (x_diff) * (1 - y_diff) + ((c >> 24) & 0xff) * (y_diff) * (1 - x_diff) + ((d >> 24) & 0xff) * (x_diff * y_diff);
blue = (a & 0xff) * (1 - x_diff) * (1 - y_diff) + (b & 0xff) * (x_diff) * (1 - y_diff) + (c & 0xff) * (y_diff) * (1 - x_diff) + (d & 0xff) * (x_diff * y_diff);
green = ((a >> 8) & 0xff) * (1 - x_diff) * (1 - y_diff) + ((b >> 8) & 0xff) * (x_diff) * (1 - y_diff) + ((c >> 8) & 0xff) * (y_diff) * (1 - x_diff) + ((d >> 8) & 0xff) * (x_diff * y_diff);
red = ((a >> 16) & 0xff) * (1 - x_diff) * (1 - y_diff) + ((b >> 16) & 0xff) * (x_diff) * (1 - y_diff) + ((c >> 16) & 0xff) * (y_diff) * (1 - x_diff) + ((d >> 16) & 0xff) * (x_diff * y_diff);
temp[offset++] = ((int) blue) | (((int) green) << 8) | ((((int) red) << 16) | (((int) alpha) << 24));
}
}
return Image.createRGBImage(temp, w2, h2, true);
}
|
1.08.2013 / 13:42 | | Shaman719 Пользователь Сейчас: Offline
Имя: Александр Регистрация: 29.07.2013
| Что неправильно в этом коде?
import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.midlet.MIDlet; public class HelloWorld extends MIDlet { public HelloWorld() { super(); public void destroyApp(boolean destroy) form = null; notifyDestroyed(); } public void pauseApp() } public void sartApp() form = new Form(."Hello,World"); String msg = "My first MIDlet"; form.append(msg); display = Display.getDisplay(this); display.setCurrent(form); } }
|
1.08.2013 / 14:40 | | mrEDitor Пользователь Сейчас: Offline
Имя: Эдуард Откуда: Новороссийск » Таганрог Регистрация: 13.03.2011
| Shaman719, пиши длинный код вот так, а лучше в файле отправляй: [spоiler][cоde=java] КОД ТУТ[/code][/spoiler] public void pauseApp() {}
public void startApp() {
form = new Form("Hello,World");
Попробуй с этим сверится. Изменено mrEDitor (1.08 / 14:41) (всего 3 раза) |
Всего сообщений: 16875 Фильтровать сообщения Поиск по теме Файлы топика (794)
|