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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замена определённых цветов картинки 
:(
    Опции темы
Гость_Mihail
Дата 23.12.2005, 16:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Есть метод, меняющий определённый цвет на другой заданный.

Вот он:
Код

    // Меняет цвет выводимых букв
    public void setFontColor(int AARRGGBB)
    {
    label_a:
        // Если устанавливаемый цвет соответствует текущему - выходим из процедуры.
        if (AARRGGBB == letterColor) break label_a; 
        int rgb_image_data[]; // хранение отдельных пикселов изображения шрифта;   
        // создаём массив пикселей, представляющий рисунок шрифта, для изменения цвета
        rgb_image_data = new int[imageFont.getWidth() * imageFont.getHeight()];
        imageFont.getRGB(rgb_image_data, 0, imageFont.getWidth(), 0, 0, imageFont.getWidth(), imageFont.getHeight());
        
// !!!!!!!!!!!  ВОТ С ЭТИМ ЦИКЛОМ ГЛЮК !!!!!!!!!!!!!!!!
        // Находим все пикселы со старым цветом шрифта, и заменяем новым цветом
        for (int i = 0; i < rgb_image_data.length; i ++)
        if (rgb_image_data[i] == letterColor){
            rgb_image_data[i] = AARRGGBB;     
        }
        
        letterColor = AARRGGBB; // Установка текущего цвета
        
        // Сохраняем изменения                
        imageFont = Image.createRGBImage(rgb_image_data, imageFont.getWidth(), imageFont.getHeight(), true);
    }



Глюк состоит в следующем:
Если установить цвет, у которого в составляющей RGB один байт цвета(синего, красного или зелёного) равен нулю, а другой нет - то цвет шрифта невозможно поменять.

Пример глюкавого цвета:
0xFF008000;

Первые два байта (FF) - устанавливают прозрачность цвета(в данном случае абсолютно непрозрачен).
Вторые: красный канал (на мой взгляд не проблемный).
Третие (зелёный канал): первый байт не равен 0, второй = 0 - именно он вызывает глюк не только в эмуляторе, но и на телефоне(я так думаю).
Четвёртый - соответственно синий канал.


В чём проблема???
  Вверх
Гость_Mihail
Дата 23.12.2005, 18:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я ошибся - оно просто не может отобразить некоторые цвета.
Я выяснил почему, и у меня возник другой вопрос.
Телефон может отображать лишь 65536 цветов, т.е. два байта на
пиксел. У меня же идет 1 байт на прозрачность(можно не учитывать) и по по 3 байта цвета на пиксел, т.е. 16777216
цветов, что превышает цвета телефона. В результате этого телефон
принимает цвет ближайший заданному. Принатый цвет не совпадает с
заданным и мой метод начинает работать не так как надо.

Итак, новый вопрос:
Как узнать, какой цвет примет телефон вместо задаваемого, до
принятия цвета телефоном?
  Вверх
Guest
Дата 23.12.2005, 19:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я сам во всём разобрался - необходимая мне функция относиться к классу Graphics.
Нужен метод getDisplayColor(int). Правда он возвращает цвет без учёта степени прозрачности(не обрабатывает первый байт числа), но за этим дело не станет.

Ну вот и всё - тему можно закрывать.
  Вверх
Dancer
Дата 23.12.2005, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha)
Renders a series of device-independent RGB+transparency values in a specified region


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
MMA
Дата 24.12.2005, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Это я - Guest и я же - Михаил.
Рисунок PNG занимает чуть меньше 4 килобайта, если хранить его массивом целых чисел, не разрастётся ли он до 25 килобайт? Хотя всё равно он это делает при смене цвета шрифта.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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