Затемнение альфа-значения пикселя андроида
Я пытаюсь затемнить альфа-канал отдельных пикселей в растровом изображении. Я хотел бы сохранить пиксели цвета RGB, но просто сделать пиксель полупрозрачным. Я посмотрел на класс Color и попробовал метод Color.argb (int,int,int, int), но ничего хорошего. Как я могу просто установить альфа пикселя, сохраняя при этом оригинальный пиксель RGB?
заранее спасибо мат.
[править] 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 ответ
Привет Террапин. Ваш фрагмент кода выглядит правильно. Просто две мысли с макушки головы.
1) Вы уверены, что ваше растровое изображение в формате ARGB_8888? Вы можете получить другой формат по умолчанию, в зависимости от обстоятельств.
2) Альфа-значения являются абсолютными (не в процентах), поэтому я думаю, что вы хотите, чтобы первый параметр был 127, а не 50.
Изменить: Кроме того, когда вы уменьшаете альфа, вы должны убедиться, что вы рисуете поверх фона, который будет эффективно просвечивать. Пожалуйста, дайте мне знать, если я решил вашу проблему или вам нужна дополнительная помощь (возможно, нам нужно больше кода).
Изменить: я думаю, что проблема в том, что у вас нет фона. Если вы уменьшите альфу и будете рисовать поверх черного, это только сделает вещи темнее. Другими словами (127, 255, 255, 255) сравнимо с (255, 127, 127, 127). Я живая обои, поэтому я всегда работаю с холстами. вот как я делаю что-то:
c.drawBitmap (sBG, 0, 0, null);
c.drawBitmap (sSprite, mWidth / 2, mHeight / 2, null);
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