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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вращение картинки, Возникла проблема при вращении 
:(
    Опции темы
GhostMasterNet
Дата 8.8.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Илья
*


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

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



Вращаю картинку при помощи аффинных преобразований. Но возникает проблема искажения изображения.
При повороте на углы 90, 180, 270, 0 градусов картинка поворачивается нормально, но для других углов происходит визуальное увеличение изображения. В фотошопе такого эффекта не возникает. Может есть какой-нибудь крутой алгоритм или способ?
PM MAIL   Вверх
SatanClaus
Дата 8.8.2007, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если ты постепенно поворачиваешь картинку, например на 1 градус, то со временем она исказится...
Чтобы этого не произошло, начальные координаты должны быть константами, а координаты повернутой картинки ты должен каждый раз пересчитывать... Короче все выглядит примерно так:

final int x = 10;
int ugol = 1;

int newX = 0;
....
while (true){
newX = x * matrPovorota(ugol);
}
....
То есть начальные координаты у тебя никогда не изменяются...

Добавлено через 45 секунд
Забыл дописать в цикле: ugol++;
PM MAIL   Вверх
GhostMasterNet
Дата 10.8.2007, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Илья
*


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

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



Ничего нового не сказал. 




PM MAIL   Вверх
GhostMasterNet
Дата 29.8.2007, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Илья
*


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

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



К теме вращения картинок. 

Выкладываю готовый класс, в котором реализованы методы вращения и изменения размеров изображений.

Надеюсь, кому-то это сэкономит время.

Код

/**
 * This class contains methods, what may rotate and scale images.
 * Cos and sin got from Midp 2.0
 * 
 */


public class Translator {

    /**
     * Rotate source image and return rotated.
     * 
     * @param argb_source source image
     * @param argb_rotated rotated image
     * @param alpha angle for rotate
     * @param imageWidth - width of image
     * @param imageHeight - height of image     
     */
    public static void rotateImage(int[] argb_source, int[] argb_rotated, int alpha, int imageWidth, int imageHeight) {

        int x0, y0, x1, y1;
        long sn =(long)( Math.sin( Math.toRadians( alpha ))* 10000); 
        long cs = (long)( Math.cos( Math.toRadians( alpha ))* 10000);
        int xc = imageWidth / 2;
        int yc = imageHeight / 2;

        for (y1 = 0; y1 < imageHeight; y1++) {

            for (x1 = 0; x1 < imageWidth; x1++) {

                // На  всякий случай заполняем  картинку цветом фона
                int bgcol = 0;
                argb_rotated [ y1 * imageWidth + x1 ] = bgcol;
                x0 = ( int ) ( ( cs * ( x1 - xc ) + sn * ( y1 - yc ) ) / 10000 + xc );
                y0 = ( int ) ( - ( sn * ( x1 - xc ) - cs * ( y1 - yc ) ) / 10000 + yc );
                // Проверяем, не  выходит ли точка  за пределы области
                if ( x0 > -1 )
                    if ( x0 < imageWidth)
                        if ( y0 > -1 )
                            if ( y0 < imageHeight ) { // Закрашиваем  точку
                                argb_rotated[ y1 * imageWidth + x1 ] = argb_source[ y0 * imageWidth + x0 ];
                            }

            }

        }
        
    }
    
/**
 * Scale source image. 
 * 
 * Scaled image has same width and height as source, but contents is scaled.
 * If you want grows image, set lambda > 1, else set lambda < 1
 * 
 * @param argb_source - given image for scale
 * @param argb_scaled - result scaled image
 * @param lambda - coefficient of scale
 * @param imageWidth - width of image
 * @param imageHeight - height of image
 */
    public static void scaleImage(int[] argb_source, int[] argb_scaled, double lambda, int imageWidth, int imageHeight) {

        int x0, y0, x1, y1;

        for (y1 = 0; y1 < imageHeight; y1++) {

            for (x1 = 0; x1 < imageWidth; x1++) {

                int bgcol = 0;
                argb_scaled [ y1 * imageWidth + x1 ] = bgcol;
                x0 = ( int ) (x1 / lambda);
                y0 = ( int ) (y1 / lambda);
                
                if ( x0 > -1 )
                    if ( x0 < imageWidth )
                        if ( y0 > -1 )
                            if ( y0 < imageHeight ) { 
                                
                                argb_scaled[ y1 * imageWidth + x1 ] = argb_source[ y0 * imageWidth + x0 ];
                                
                            }
            }

        }
        
    }

    
}


PM MAIL   Вверх
VKoresh
Дата 24.9.2007, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 14.6.2007
Где: Запорожье

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



Вот еще в догонку инфа с Мобилаба - Поворот картинки
Там же лежат исходники и пример готовой программы.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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