*
  Мысли   Галерея   Проекты   Тексты  
  Мысли   Галерея   Проекты   Тексты  
Giver: Веселые разукрашки  (2010-01-10 08:03:18)

Бочонок намоделили, a теперь нужно его раскрасить. Причем в это же время нужно оставить alpha-канал в покое, то есть закрасить остальное, поэтому метод через g2d.setColor(new Color(цвет, 127)); g2d.fillRect(); отпал сразу. Долго ковырял Composite, но никаких положительных результатов это не дало. Уже ближе к полуночи в голове начал вызревать хитрый план.

Исходная картника(1) у нас в градациях серого , и это замечательно. То есть все каналы равны, кроме альфы. Убрав ненужный канал мы получим бочку, залитую оставшимися. Например если убрать красный и синий канал, оставив лишь зеленый выйдет бочка нумер 2, если же наоборот закрыть только зеленый, то выйдет пурпурный (3), закрыв синий канал получим желтую бочку (4). Спрятав все каналы получим силует бочки (5), или ее маску, вещь тоже иногда полезную.

Смотрим как у явы с каналами, видим что очень печально. Люди либо используют страшный обход всех пикселей копии картинки накладывая битовую маску. Другой, более, но недостаточно красивый вариант, использовать ColorLookupOp, для этого нужны еще два 256-элементных массива типа short, и картинка, опять же, на выходе будет копия. Ее хотелось бы избежать.

В отчаянии просматривая дебаггером содержимое BufferedImage я наткнулся на достаточно интересную штуку — ColorModel. Именно она занималась преобразованием набора байт в конкретный цвет. Превосходно! Пишем обертку которая скрывает по желанию некоторые каналы.

public class ShadowColorModel extends ComponentColorModel {
    boolean red, green, blue;

    /**
     * Копируем параметры из родитеслькой цветовой модели и сохраняем парамтртры преобразования 
     */
    public ShadowColorModel(ColorModel parent, boolean red, boolean green, boolean blue) {
        super(parent.getColorSpace(), parent.hasAlpha(), parent.isAlphaPremultiplied(), 
              parent.getTransparency(), parent.getTransferType());
        this.red = red;
        this.green = green;
        this.blue = blue;
    }

    /**
     * Если красный цвет разрешен, возвращаем значение, иначе 0
     */
    public int getRed(Object inData) {
        return red ? super.getRed(inData) : 0;
    }

    /**
     * Таким же образом поступаем с остальными цветами
     */
    public int getGreen(Object inData) {
        return green ? super.getGreen(inData) : 0;
    }

    public int getBlue(Object inData) {
        return blue ? super.getBlue(inData) : 0;
    }
}

Что мы получаем в итоге? Желанный эффект достигнут, стоит создать объект класса BufferedImage с тем же растром, что и исходная картинка, на наложив ограничения на каналы. При этом копирования данных картинки не происходит, она хранится в памяти лишь один раз. Падения производительности нет. Все рады и довольны.


dobson от 2020-10-08 18:47:19:
Ok46xq http://pills2sale.com/ cheap viagra
Carmen от 2020-10-16 16:58:17:
My battery's about to run out valtrex cost at walmart However, Girardi stopped short of ruling Gardner out if the Yankees do make the postseason. “I think he’d be available, yes,” Girardi said, although it remains to be seen if that’s just the skipper’s natural optimism.
Evelyn от 2020-10-16 16:58:19:
I'm a member of a gym buying whole alligator According to the study, reductions in soot and methane would limit temperature increases by only 0.16 degrees Celsius by 2050. This is significantly less than previous estimates of a reduction of 0.5 degrees Celsius. Soot comes from such things as car emissions, wood stoves, and forest fires. Methane, the primary component of natural gas, is released into the air mainly by leaking pipelines, coal mines and landfills.
Luke от 2020-10-16 16:58:19:
International directory enquiries amlodipine 10 mg generic price philippines "The reaction of many people to the Daily Mail's attacks on my father this week demonstrates that the way your newspapers have behaved does not reflect the real character of our country."
Lindsay от 2020-10-16 16:58:19:
Thanks funny site how long for tylenol to get out of your system Copper and oil prices rebounded from early losses afterChina's president, Xi Jinping, in remarks published on Tuesday,emphasized the government's determination to restructure thecountry's slowing economy. Yields on low-risk U.S. and Germangovernment debt rose as higher equity prices reduced theirsafe-haven appeal.
Ervin от 2020-10-16 16:58:20:
How do you do? treating yeast infection from amoxicillin “You look at any good power play, when you get that first shot through, that’s when the penalty kill breaks down,” Del Zotto said of the coaches’ emphasis on the power play. “That’s when those pretty plays can open up.”
Desmond от 2020-10-16 17:17:05:
A financial advisor zofran odt coupon The chief difference between the IPO mutual fund and theexpected ETF, is that the mutual fund is actively managed andcan include shares purchased when the company goes public, saidRenaissance Principal Kathy Smith.
Boyce от 2020-10-16 17:17:06:
Where do you come from? paxil cr 125mg prices From Istanbul, the head of the Syrian National Coalition, Ahmad Al-Jarba, also criticized the lack of response to the attack by the United Nations and the international community, saying the UN was discrediting itself.
Robbie от 2020-10-16 17:17:06:
I'm afraid that number's ex-directory neurontin 600 cena The International Monetary Fund last week revised down its global growth projection for this year by a quarter-point to 3.1 percent, which Bart van Ark, chief economist in New York with the Conference Board, a business research group, said was between one and 1.5 percentage points below potential.
Anna от 2020-10-16 17:17:07:
We used to work together glucophage xr weight loss “You can have positive brainwashing,” says Rob Gilbert, a professor of sports psychology at Montclair State. “The best examples of how it works are the 12-step groups, the serenity prayer and even advertising. The most effective inspirational phrase of all might have been Nike’s, ‘Just do it.’