2013-04-05 3 views
2

Я настраиваю альфа rgb для проверки в java. Этот код изменяет значение альфа, но после сохранения файла я не могу получить то же значение. Как преодолеть эту проблему.Изменение альфа-бит rgb

// ================ Code for setting alpha =============== 
int alpha=140; 
// alpha value to set in rgb 

int b=alpha<<24; 
b=b|0x00ffffff; 

ialpha.setRGB(0, 0,ialpha.getRGB(0, 0)&b); 
// ialpha is a bufferedimage of type TYPE_INT_ARGB 

ImageIO.write(ialpha, "png", new File("C:/newimg.png")); 
System.out.println("\nFile saved !"); 

// ================ Code for getting alpha =============== 

int val=(ialpha.getRGB(0, 0)&0xff000000)>>24; 
if(val<0) 
val=256+val; 
System.out.println("Returned alpha value:"+val); 

Это просто возвращает 255 как значение альфа. он не возвращает значение i, установленное i.e 140.

Пожалуйста, помогите мне получить ранее введенное значение альфа.

+0

Почему вы используете бит-операцию? В java есть несколько прекрасных функций, чтобы получить заданный rgb, чтобы создать новый цвет и так далее. –

+0

Возможный дубликат [this] (http://stackoverflow.com/questions/6734171/set-rgb-and-alpha-component-value-of-a-color?rq=1). Вы можете найти то, что ищете здесь. – Maximin

ответ

1

Проблема в коде для получения альфы. Во второй операции сдвига бит вы не учитываете бит знака.

int val=(ialpha.getRGB(0, 0) & 0xff000000) >> 24; 

Это даст значение 0xffffff8c (учитывая ваш первоначальный альфа 140 из 0x8c). См. Bitwise and Bit Shift Operators для более подробной информации. В частности:

Беззнаковый оператор сдвига вправо «>>>» сдвигает нуль в крайнее левое положение, а крайнее левое положение после «>>» зависит от расширения знака.

Вы должны либо сделать что-либо:

int val = (ialpha.getRGB(0, 0) & 0xff000000) >>> 24; // shift zero into left 

Или:

int val = ialpha.getRGB(0, 0) >> 24) & 0xff; // mask out the sign part 

PS: Я предпочитаю последний, потому что большинство людей (включая меня) не помню, что >>> оператор фактически делает. ;-)

 Смежные вопросы

  • Нет связанных вопросов^_^