Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Изменение глубины цвета


Автор: Иннокентий 27.2.2006, 04:21
Первый вопрос: «Как полноцветную картинку с расширением (*.bmp) перевести из 16 миллионов цветов в - 256 цветов или 128 или в 64 или 32, как это, к примеру, происходит в стандартной Windows программе “MSPAINT.EXE". Когда при записи картинки выставляешь 256-цветный рисунок (*.bmp; *.dib)»

Второй вопрос: «А также как программно найти и выставить между двумя разными по цвету точками соответствующий их единый полутон «этих двух точек».

Третий вопрос: «Можно ли программно получить 16 миллионов цветов только серого цвета. И чтобы при этом полутона не повторялись.

Я использую программный метод:
‘--------------------
Код

jkp = 255
For ip = 1 To jkp
WUKl1(2, ip) = RGB(ip * 255 / jkp, ip * 255 / jkp, ip * 255 / jkp)
'PSet (ip + 200, 500), Val(WUKl1(2, ip)) 'Серый
Next: 

‘--------------------

Но, этот код позволяет создать неповторяющихся всего 256 черно-белых тонов .

Заранее Вам БЛАГОДАРЕН.

С уважением к Вам,
Иннокентий

Автор: cardinal 27.2.2006, 15:14
Модератор: Пожалуйста, один топик - один вопрос.

Вот это почитай:
http://forum.vingrad.ru/index.php?showtopic=84616

Автор: Иннокентий 1.3.2006, 19:05
Мир Вам!

Автор: cardinal 1.3.2006, 20:53
И Вам Мир! smile

Автор: Иннокентий 1.3.2006, 21:03
Цитата(cardinal @ 27.2.2006, 15:14 Найти цитируемый пост)
Вот это почитай:
http://forum.vingrad.ru/index.php?showtopic=84616



Не могли бы Вы мне показать все это в программном коде VB

Автор: Иннокентий 2.3.2006, 02:40
Dimkin [email protected]

Цитата: Dimkin «ну так ессесено он и будет создавать 256. у Вас ведь цикл до 255!или я что то не так понял? я на самом деле больше по БД специализируюсь.как таковые проги не пишу. а если не секрет для чего это нужно?».

Мир Вам!
Вы правильно подметили, то, что когда я увеличиваю Цикл и делаю его больше 256, то он почему-то начинает просто дублировать эти же серые цвета из 256. Общее количество меняется, а новых черно-белых тонов нет, чтобы они могли выйти за пределы все того же 255 цикла.

А для чего нужно скажу: я хочу, построит программу, чтобы с ее помощью можно было из черно-белого изображения переводить в цветное.

Вот весь секрет, хотя в этой области я и достиг весьма больших результатов, но стал спотыкаться на обычных программных кодах. V.Basic ПК, Так как взятые за основу методы построения света неверные изначально, то и построенная разработчиками империя света похоронила под собой преобразование черно белое изображение в цвет.

Я создал программу и ей уже показал людям, что можно программно преобразовывать черно-белое изображение в цвет без всяких искажений и подмен, и тем видел изумление людей которые до этого говорят: «Это невозможно, кроме как раскрашивать черно-белое изображение «фото» в ручную в «Photoshop»».

Но, моя программа работает только в диапазоне 256 цветов и я не могу пока обычными методами выскочить за пределы 256 цветов, чтобы получить полноценную картину из более 16 миллионов цветов. Но это трудности лишь технические, по этому думаю в ближайшее время в сеже поставить в этом щекотливом деле большую жирную точку.

Автор: cardinal 2.3.2006, 04:49
Цитата(Иннокентий @ 1.3.2006, 19:03 Найти цитируемый пост)
Не могли бы Вы мне показать все это в программном коде VB

Может это поможет
http://www.activevb.de/tipps/vb6tipps/tipp0630.html
Ну и вот еще пример
http://www.activevb.de/tipps/vb6tipps/tipp0633.html

Автор: Naghual 2.3.2006, 10:15
Цитата
я хочу, построит программу, чтобы с ее помощью можно было из черно-белого изображения переводить в цветное


А зачем изобретать велосипед?
http://www.recolored.com/

Автор: cardinal 2.3.2006, 17:17
Цитата(Иннокентий @ 27.2.2006, 02:21 Найти цитируемый пост)
Третий вопрос: «Можно ли программно получить 16 миллионов цветов только серого цвета. И чтобы при этом полутона не повторялись.

Хороший вопрос. Я считаю, что такое сделать нельзя "программно", т.к. 16 миллионов цветов это все возможные оттенки, которые может показывать монитор, а серые тона относятся к этим 16 миллионам.
Ну а в жизни серых тонов сколько угодно, только разницу между ними глазом все равно не уловишь... Обратный вопрос: зачем? smile

Автор: Иннокентий 3.3.2006, 21:33
«Cardinal»,спасибо за весьма интересные ссылки. Есть у Вас еще, что ни будь подобное.

Я профессионально занимался фото как фото художник. И мне часто приходилось по работе раскрашивать старые черно-белое фото. И скажу, что руками раскрасить фото весьма проблематично, да и выглядит весь этот раскрас весьма уродливо. Это для обывателя круто: была черно-белая, и вдруг стало «цветной».

Вот вы сказали: «Программно перевести из черно-белого в цвет не возможно»!. Нет, это уже возможно и весьма на хорошем уровне, пусть пока не на все сто, но уже программно это возможно!. И я в будущем покажу вам, это чудо (программу), как только доведу все до ума. Поэтому я прошу у вас всевозможные разные примеры по графики, особенно все, что связано с преобразованием в цветов.

Новый подход и разработанная на основе его технология «цвета» в будущем позволит перевести всю технику из трех цветного в черно-белый цвет. Этот способ даст большую скорость передачи информации на расстоянии. При передачи только одной цветной картинки приходится передавать три с разными цветами (Красный, Зеленый, Синий).
А теперь достаточно будет отправить только одну черно-белую фото, и результат будет тот же, а эффект колоссальный.

Автор: Exception 3.3.2006, 22:08
Но тогда ухудшится качество. Ведь это понятно теоретически.

Автор: cardinal 4.3.2006, 02:41
Цитата(Иннокентий @ 3.3.2006, 19:33 Найти цитируемый пост)
Вот вы сказали: «Программно перевести из черно-белого в цвет не возможно»!.

я?

Автор: Иннокентий 4.3.2006, 07:46
Цитата: Exception «Но тогда ухудшится качество. Ведь это понятно теоретически».

Мир Вам!
Нет, не ухудшится качество, а наоборот, уже сто процентная передача цвета, из черно-белого в цвет и на оборот.

Автор: Иннокентий 5.3.2006, 08:00
Цитата(cardinal @ 4.3.2006, 02:41)
Цитата(Иннокентий @  3.3.2006,  19:33 Найти цитируемый пост)
Вот вы сказали: «Программно перевести из черно-белого в цвет не возможно»!.

я?

Извини я был не совсем в внимателен!…

Автор: Naghual 6.3.2006, 10:34
Иннокентий я не согласен с вами.
Данная технология только ухудшит качество изображения.

Автор: Иннокентий 6.3.2006, 20:14
Цитата(Иннокентий @ 27.2.2006, 04:21 Найти цитируемый пост)
Присоединённый файл ( Кол-во скачиваний: 1 )
  0098.exe 32,00 Kb


Посмотри где тут искажение?

Автор: Naghual 6.3.2006, 20:47
Ок. Сделай то-же самое с фоткой.

Автор: Иннокентий 7.3.2006, 15:01
Цитата(Иннокентий @ 27.2.2006, 04:21 Найти цитируемый пост)
Присоединённый файл ( Кол-во скачиваний: 0 )
  0098_023_0.exe 72,00 Kb


Попробуй вот этот файл: 0098-023-0.EXE


Автор: Akina 7.3.2006, 15:45
Я что-то не понимаю - куда копья ломаем?

Цитата(Иннокентий @ 27.2.2006, 05:21 Найти цитируемый пост)
Можно ли программно получить 16 миллионов цветов только серого цвета. И чтобы при этом полутона не повторялись.

256 градаций серого - это предел. То есть в файле можно настрогать и 16 миллионов несовпадающих оттенков (создать собственную палитру) - но вывести их на экран или печать не получится просто потому, что нет такого видеорежима или режима печати. Да и нечем - нет программных средств работы с такой палитрой и аппаратных средств ее отображения.

Соответственно однозначное преобразование 256 градаций серого (8 бит на точку) в полноцветное (24-битное) - задача невозможная. Будут горы вариантов, каждый из которых - совершенно легальный. Хотя при этом возможно решение задачи выбора вырианта.

Цитата(Иннокентий @ 27.2.2006, 05:21 Найти цитируемый пост)
как программно найти и выставить между двумя разными по цвету точками соответствующий их единый полутон «этих двух точек».

Понятно что простейший вариант - это полусумма ака среднее арифметическое по каждому цветовому компоненту. Кстати, это подходит и для градаций серого. Впрочем простейший - не значит правильный.

Цитата(Иннокентий @ 27.2.2006, 05:21 Найти цитируемый пост)
Как полноцветную картинку с расширением (*.bmp) перевести из 16 миллионов цветов в - 256 цветов или 128 или в 64 или 32

Ну это совсем просто - откусывание младших битов каждой цветовой составляющей. С округлением к ближайшему.

Цитата(Иннокентий @ 27.2.2006, 05:21 Найти цитируемый пост)
этот код позволяет создать неповторяющихся всего 256 черно-белых тонов

Правильно, остальные сочетания - не серые. Цветные.

Цитата(Иннокентий @ 3.3.2006, 22:33 Найти цитируемый пост)
Новый подход и разработанная на основе его технология «цвета» в будущем позволит перевести всю технику из трех цветного в черно-белый цвет. Этот способ даст большую скорость передачи информации на расстоянии. При передачи только одной цветной картинки приходится передавать три с разными цветами (Красный, Зеленый, Синий).
А теперь достаточно будет отправить только одну черно-белую фото, и результат будет тот же, а эффект колоссальный.

Нет, не приходится передавать три картинки. Передается одна. 24 бита на точку. Вы предлагаете упаковать их в 8 бит и на другой стороне снова развернуть. Так вот - упаковать можно, а развернуть БЕЗ ПОТЕРИ - не получится. Копия будет отличаться от оригинала. А если родить формат с 16 миллионами градаций серого - какая разница какие 24 бита передавать, цветные или серые? размер тот же.
Не зря были рождены упакованные форматы - начиная от RLE и кончая JPG. Причем обрати внимание - где допустимо управление степенью сжатия, непременно указывается, что чем выше степень сжатия, тем хуже качество копии. А "и рыбку съесть, и косточкой не подавиться" - это абсолютный и невозможный импоссибль.Каждый, кто заявлял об успехе на подобного рода пути, по ближайшем рассмотрении оказывался шарлатаном, хорошо если заблуждающемся, а не сознательным...

Автор: Иннокентий 8.3.2006, 08:29
Цитата(Иннокентий @ 27.2.2006, 05:21): «Как полноцветную картинку с расширением (*.bmp) перевести из 16 миллионов цветов в - 256 цветов или 128 или в 64 или 32».

Цитата: Akina «Ну это совсем просто - откусывание младших битов каждой цветовой составляющей. С округлением к ближайшему».

Мир вам!
Научи, мня как это сделать правильно в программном коде на Visual Basic. Покажи простенький пример, если у тебя такой имеется.

Цитата: Akina «256 градаций серого - это предел. То есть в файле можно настрогать и 16 миллионов несовпадающих оттенков (создать собственную палитру) - но вывести их на экран или печать не получится просто потому, что нет такого видеорежима или режима печати. Да и нечем - нет программных средств работы с такой палитрой и аппаратных средств ее отображения».

Я это и сам понял, оттого и задал Вам этот щекотливый вопрос, а в друг!...

Цитата: Akina «Соответственно однозначное преобразование 256 градаций серого (8 бит на точку) в полноцветное (24-битное) - задача невозможная. Будут горы вариантов, каждый из которых - совершенно легальный. Хотя при этом возможно решение задачи выбора варианта».

Нет ничего невозможного, даже иногда мертвые встают из гробов своих, а мы не можем исправить даже ошибки дел рук своих. Посмотри на маленькое семя, оно такое крошечное, но из него вырастает больное полноценное дерево. Поэтому так говорить: «задача невозможная», в нашем деле не уместно.

Цитата: Akina «Нет, не приходится передавать три картинки. Передается одна. 24 бита на точку. Вы предлагаете упаковать их в 8 бит и на другой стороне снова развернуть. Так вот - упаковать можно, а развернуть БЕЗ ПОТЕРИ - не получится. Копия будет отличаться от оригинала. А если родить формат с 16 миллионами градаций серого - какая разница какие 24 бита передавать, цветные или серые? размер тот же».

Неважно три картинки, или три раза по 8-(24),суть одно, у нас есть в наличии только 8 полноценных бит, но и в этом уже достаточно, чтобы можно было найти то самое умное решение.

Помогите мне с решением простых примерах, а я Вам помогу решить весьма сложные.

Начни с этого: Цитата: Akina «Ну это совсем просто - откусывание младших битов каждой цветовой составляющей. С округлением к ближайшему».

Цитата: Akina «Каждый, кто заявлял об успехе на подобного рода пути, по ближайшем рассмотрении оказывался шарлатаном, хорошо если заблуждающемся, а не сознательным...».

Автор: Иннокентий 8.3.2006, 20:48

Это программа позволяет найти, между двух разных точек по цвету общую среднюю по цвету точку.
Код


Private Sub Command1_Click()
Dim V, V1
Dim D1, R1, G1, B1
Dim D2, R2, G2, B2
Dim D3, R3, G3, B3
'
V = 255 ' Красный цвет
V1 = 65535 ' Желтый цвет
'
R1 = V Mod 256 'Красный
G1 = ((V And &HFF00) / 256) Mod 256 'Зеленый
B1 = ((V And &HFF0000) / 65536) 'Синий
'
D1 = RGB(R1, G1, B1)
Picture1.PSet (100, 100), D1

'------
R2 = V1 Mod 256 'Красный
G2 = ((V1 And &HFF00) / 256) Mod 256 'Зеленый
B2 = ((V1 And &HFF0000) / 65536) 'Синий
'
D2 = RGB(R2, G2, B2)
Picture1.PSet (300, 100), D2

'------
R3 = (R1 + R2) / 2
G3 = (G1 + G2) / 2
B3 = (B1 + B2) / 2
'
D3 = RGB(R3, G3, B3) ‘
Picture1.PSet (200, 100), D3

End Sub




Можете подсказать мне иной вариант? Как найти между двумя известными точками, разными по цвету, несколько промежуточных точек в цикле?

Буду Вам весьма благодарен.
Иннокентий <[email protected]>



Автор: Akina 9.3.2006, 10:17
Цитата(Иннокентий @ 8.3.2006, 21:48 Найти цитируемый пост)
Как найти между двумя известными точками, разными по цвету, несколько промежуточных точек в цикле?

Функция преобразования RGB в Color имется - RGB(red, green, blue).
Обратной нет, но ее можно создать, вернее не функцию, а процедуру - ибо нужно получить массив либо 3 переменных. А заодно функцию выделения нужного компонента

Код

Public Sub Color2RGB(lColor as Long, iRed as Integer, iGreen as Integer, iBlue as Integer)
iRed=iColor MOD 256&
iGreen=(iColor \ 256&) MOD 256&
iBlue = iColor \ 65536&
End Sub

Public Function GetColorComponent(lColor as Long, iComponent as Integer) as Integer
Select Case iComponent
  Case vbBlue ' 1
    GetColorComponent = iColor \ 65536&
  Case vbGreen ' 2
    GetColorComponent = (iColor \ 256&) MOD 256&
  Case vbRed ' 4
    GetColorComponent = iColor MOD 256&
  Case Else
    GetColorComponent = 0
End Select
End Function


А затем
Код

For i = 1 To N - 1
Component(i) = (Component(0) * i + Component(N) * (N - i + 1)) \ (N + 1)
Next

Автор: SCINER2 10.3.2006, 15:33
В десять раз быстрее вышеперечисленных методов!
Код

Option Explicit
'Created by SCINER: [email protected]

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private Type RGBTYPE
  R As Byte
  G As Byte
  B As Byte
  A As Byte
End Type

Private Sub Command1_Click()
  Dim RGBA1 As RGBTYPE
  Dim RGBA2 As RGBTYPE
  Dim lColor1 As Long
  Dim lColor2 As Long
  lColor1 = vbRed
  lColor2 = vbYellow
  CopyMemory RGBA1, lColor1, 4
  CopyMemory RGBA2, lColor2, 4
  RGBA1.R = RGBA1.R * 0.5 + RGBA2.R * 0.5
  RGBA1.G = RGBA1.G * 0.5 + RGBA2.G * 0.5
  RGBA1.B = RGBA1.B * 0.5 + RGBA2.B * 0.5
  Print RGBA1.R
  Print RGBA1.G
  Print RGBA1.B
End Sub

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)