Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение размера изображения 
:(
    Опции темы
BuggyDdd
  Дата 21.12.2007, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 4.12.2007

Репутация: нет
Всего: нет



Скажите пожалуйста, как можно изменить размеры изображения под ширину и высоту экрана? Просто я получаю данные с папки изображения, там картинки большого размера и при выводе их в своей программе они не влезают.
PM MAIL   Вверх
DEER
Дата 21.12.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: нет
Всего: 13



держи кусок на эту тему.
думаю разберешься
Код

    private static BufferedImage transformImage(BufferedImage srcImg, double srcW, double srcH, double rotate, double winX, double winY, double scaleLevel) {
        double buf;
        if (rotate != 0) {
            buf = srcW;
            srcW = srcH;
            srcH = buf;

            buf = winX;
            winX = winY;
            winY = buf;
        }

        if (scaleLevel == 0d) {
            //всякартинка должна поместиться на изображении
            winX = winY = 0;
        }

        //if(ver > XXX)
        //maxScaleLevel пока равен 3 для всех версий 2<<3=8
        winX /= 8d;
        winY /= 8d;

        if (rotate != 0) {
            //TODO поворот почему--то нельзя совершать на 270 градусов. пока забиваю на это, но оптом нужно разобраться
            rotate = Math.PI / 2;
        }

        scaleLevel = Math.pow(2d, scaleLevel);

        return transformImageInternal(srcImg, srcW, srcH, rotate, winX, winY, scaleLevel);
    }

    /**
     * @param srcImg
     * @param srcW       - ширина экрана, на котором будет отображаться картинка
     * @param srcH       - высота экрана, на котором будет отображаться картинка
     * @param rotate     - на сколько поворачивать картинку
     * @param winX       - точная координата X верхней точки, которая будет показываться на экране
     * @param winY       - точная координата Y верхней точки, которая будет показываться на экране
     * @param scaleLevel - (0,1,2,3)коэфициент увеличения размеров. Он испоьльзуется при resize
     * @return результирующее изображение
     */
    private static BufferedImage transformImageInternal(BufferedImage srcImg, double srcW, double srcH, double rotate, double winX, double winY, double scaleLevel) {

        double scaleBase;
        if ((double) srcImg.getWidth() / (double) srcImg.getHeight() >= srcW / srcH) {
            //ширина экрана меньше высоты - обычное дело для сотовых телефонов
            scaleBase = srcW / (double) srcImg.getWidth();
        } else {
            //высота экрана убогая
            scaleBase = srcH / (double) srcImg.getHeight();
        }

        double scale = scaleBase * scaleLevel;

        int imgX1 = (int) (winX / scaleBase);
        int imgY1 = (int) (winY / scaleBase);
        int imgX2 = imgX1 + (int) (srcW / scale);
        if (imgX2 > srcImg.getWidth()) imgX2 = srcImg.getWidth();
        int imgY2 = imgY1 + (int) (srcH / scale);
        if (imgY2 > srcImg.getHeight()) imgY2 = srcImg.getHeight();

        BufferedImage srcImCut;
        if (imgX2 - imgX1 != srcImg.getWidth() || imgY2 - imgY1 != srcImg.getHeight()) {
            srcImCut = srcImg.getSubimage(imgX1, imgY1, imgX2 - imgX1, imgY2 - imgY1);
        } else {
            srcImCut = srcImg;
        }
        System.out.println("Cut (x1,y1,x2,y2)=(" + imgX1 + "," + imgY1 + "," + imgX2 + "," + imgY2 + ")");

        AffineTransform at = new AffineTransform();

        // scale image
        at.scale(scale, scale);
        System.out.println("Scale (w,h)=(" + ((imgX2 - imgX1) * scale) + "," + ((imgY2 - imgY1) * scale) + ")");

        if (rotate != 0) {
            System.out.println("Rotate angel=" + (rotate * 180 / Math.PI));
            at.rotate(rotate, srcImCut.getWidth() / 2.0, srcImCut.getHeight() / 2.0);
        }

        AffineTransform translationTransform;
        translationTransform = findTranslation(at, srcImCut);
        at.preConcatenate(translationTransform);

        BufferedImageOp bio;
        bio = new AffineTransformOp(at, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);

        return bio.filter(srcImCut, null);
    }




--------------------
 
PM MAIL WWW ICQ MSN   Вверх
eugine_s
Дата 21.12.2007, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



DEER, конфа по J2ME.... идея-то может и пойдет, но реализация - нет.



BuggyDdd, посмотри вот тут
PM MAIL   Вверх
DEER
Дата 21.12.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: нет
Всего: 13



eugine_s, ну это не J2ME, но для мобил вообще то писали... для смартов наверное..
мдя. чото я ошибся раздельчиком

Это сообщение отредактировал(а) DEER - 21.12.2007, 17:19


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0736 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.