затемнение альфа-значения пикселя андроида - PullRequest
0 голосов
/ 08 мая 2011

Я пытаюсь затемнить альфа-канал отдельных пикселей в растровом изображении.Я хотел бы сохранить цвет пикселей RGB, но просто сделать пиксель полупрозрачным.Я посмотрел на класс Color и попробовал метод Color.argb (int, int, int, int), но безрезультатно.Как я могу просто установить альфа пикселя, сохраняя при этом оригинальный пиксель RGB?

спасибо заранее мат.

[edit] lol terrapin :).Привет, ниже, как я настраиваю свое растровое изображение.у меня нет основного изображения, если вы это имеете в виду.то, что я пытаюсь сделать, это сделать некоторые пиксели наполовину прозрачными.У меня есть растровое изображение и поместил круг на растровое изображение.у меня есть алгоритм на месте, который нацелен только на пиксели внутри круга, и я могу изменить эти пиксели, чтобы сказать розовый.я хотел бы проверить каждый пиксель в круге и сделать его прозрачным, сохраняя при этом половину исходного цвета пикселя, если это имеет смысл:)

 bgr.setPixel(i,y,Color.argb(50,255,255,255));

[править]

BitmapFactory.Options bfo = new BitmapFactory.Options();
        bfo.inSampleSize = 1;

        bm = BitmapFactory.decodeByteArray(imageArray, 0, imageArray.length, bfo);
        bgr = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), bm.getConfig());
        bgr = bm.copy(bm.getConfig(), true);

1 Ответ

2 голосов
/ 08 мая 2011

Привет Террапин.Ваш фрагмент кода выглядит правильно.Всего лишь две мысли из головы.
1) Вы уверены, что ваше растровое изображение в формате ARGB_8888?Возможно, вы получите другой формат по умолчанию, в зависимости от обстоятельств.
2) Альфа-значения являются абсолютными (не в процентах), поэтому я думаю, что вы хотите, чтобы первый параметр был 127, а не 50.

РедактироватьКроме того, когда вы уменьшаете альфа, вы должны убедиться, что вы рисуете поверх фона, который будет эффективно просвечивать.Пожалуйста, дайте мне знать, если я рассмотрел вашу проблему или вам нужна дополнительная помощь (возможно, нам нужно больше кода).

Редактировать: Я думаю, что проблема в том, что у вас нет фона.Если вы уменьшите альфу и будете рисовать поверх черного, это только сделает вещи темнее.Другими словами (127, 255, 255, 255) сопоставимо с (255, 127, 127, 127).Я живая обои, поэтому я всегда работаю с холстами.вот как я что-то делаю:
c.drawBitmap (sBG, 0, 0, ноль);
c.drawBitmap (sSprite, mWidth / 2, mHeight / 2, ноль);
sBG - полный битовый образгейроглифики, которые показывают через мой «призрачный» спрайт (sSprite имеет альфа ~ 127).
Я просто наложил растровые изображения на холсте, и когда я рендерил холст, все хорошо.: -)

Редактировать: Уменьшение альфа обычно используется, чтобы позволить чему-то просвечивать сзади.Я думаю, вам нужно точно определить, что вы имеете в виду (математически) под «выцветанием цвета, чтобы оно выглядело немного прозрачным».Например, превращение красного в розовый означало бы смешивание в белом;это эквивалентно прозрачности с белым фоном (смешивание белого цвета - это то, как вы меняете насыщенные цвета на пастельные).Я предлагаю поэкспериментировать с GIMP или Photoshop (можно настроить альфа-слой), чтобы определить, какой эффект лучше всего будет отвечать вашим потребностям, а затем попытаться воспроизвести его в Android.

Редактировать: я подумал, что это может «побудить» васупомяните, что это сложные и, надеюсь, интересные вещи, с которыми вы сталкиваетесь.В компьютерной графике иногда приходится делать вещи, которые не обязательно интуитивны, чтобы достичь желаемого эффекта.Я буду утверждать, что убедительная прозрачность нетривиальна ... требует использования фоновых объектов, освещения и / или анимации.Я не знаю много об этом конкретном эффекте, но вот одна ссылка, которая вам может понравиться: http://www.neilblevins.com/cg_education/translucency/translucency.htm
Что-то, о чем я немного знаю, это создание металлических текстур.И в этом вся хитрость: вам почти всегда приходится использовать отражения.Это видео на YouTube является хорошей демонстрацией: http://www.youtube.com/watch?v=k6ZiRNkbWPw
Люди, которые действительно в этом заинтересованы, даже выбирают HDRi!Например, посмотрите на отражающую сферу здесь: http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/HDRi

...