Когда пользователь нажимает назад, результатом является RESULT_CANCELED , а полученное data
значение равно нулю. Таким образом, приложение вылетает при вызове data.getData()
, когда вы вызываете getData()
для нулевого объекта. Есть несколько способов обойти это: вы можете проверить, что такое resultCode
, и убедиться, что это RESULT_OK
. Вы также можете просто проверить, является ли data
Intent нулевым, прежде чем пытаться получить из него данные:
if (requestCode == PICK_IMAGE_REQUEST) {
if (data != null) {
filePath = data.getData();
} else {
// Note: if filePath is by default null, you don't need this else statement
filePath = null;
}
if (filePath != null) {
...
Определенные числа в вопросе от CCIR 601 (см. ссылку ниже Википедии).
При преобразовании RGB-> шкала полутонов с немного отличающимися числами / различные методы Вы не будете видеть, что много различия вообще на нормальном мониторе в нормальных условиях освещения - пробует его.
Вот еще некоторые ссылки на цвет в целом:
Википедия Luma
Выдающийся веб-сайт Bruce Lindbloom
глава 4 по Раскрашивает книгу Colin Ware, "Визуализации информации", ISBN 1-55860-819-2; эта длинная ссылка на Ware в books.google.com может или не может работать
cambridgeincolor: превосходные, правильно написанные "учебные руководства о том, как получить, интерпретируйте и обработайте цифровые фотографии с помощью визуально ориентированного подхода, который подчеркивает понятие по процедуре"
Если Вы сталкиваетесь "линейный" по сравнению с "нелинейным" RGB, вот часть старого примечания мне на этом. Повторитесь, на практике Вы не будете видеть большого различия.
В цветной науке, общих значениях RGB, как в HTML rgb (10%, 20%, 30%), названы "нелинейными" или исправленная Гамма. "Линейные" значения определяются как
Rlin = R^gamma, Glin = G^gamma, Blin = B^gamma
где гамма 2.2 для многих ПК. Обычные R G B иногда пишутся как R' G' B' (R' = Rlin ^ (1/гамма)) (щелчок языка пуристов), но здесь я отброшу '.
Яркость на дисплее CRT пропорциональна RGBlin = RGB ^ гамма, таким образом, 50%-й серый на CRT является довольно темным:.5 ^ 2.2 = 22% максимальной яркости. (Жидкокристаллические дисплеи более сложны; кроме того, некоторые видеокарты компенсируют гамму.)
Получить меру названной легкости L*
от RGB сначала разделите R G B на 255 и вычислите
Y = .2126 * R^gamma + .7152 * G^gamma + .0722 * B^gamma
Это Y
в цветовом пространстве XYZ; это - мера цветной "яркости". (Реальные формулы не точно x^gamma, но близко; палка с x^gamma для первичной обработки.)
Наконец,
L* = 116 * Y ^ 1/3 - 16
"... стремится к перцептивной однородности [и] тесно соответствует человеческому восприятию легкости". - Цветовое пространство Wikipedia Lab
Я нашел, что эта публикация сослалась в ответе на предыдущий подобный вопрос. Это очень полезно:
http://cadik.posvete.cz/color_to_gray_evaluation/
Это показывает 'тонны' различных методов для генерации полутоновых изображений с различными результатами!
Проверьте Цвет FAQ для получения информации об этом. Эти значения прибывают из стандартизации значений RGB, которые мы используем в наших дисплеях. На самом деле, согласно Цвету FAQ, значения, которые Вы используете, устарели, поскольку они - значения, используемые для исходного стандарта NTSC и не современных мониторов.
Вот статья о том, как эти числа (или подобные) были получены: