Большой Воронежский Форум
» Программирование>Работа с графикой в Delphi
Boing747 16:27 21.09.2009
Подскажите каким оператором можно определить цвет пикселя в i-той строке в j-ом столбце на картинке формата jpg или bmp [Ответ]
DWanek 16:47 21.09.2009
В загруженной в TBitmap: Pixels[i, j]. [Ответ]
Andrei_ra 19:22 21.09.2009
лучше ScanLine использовать в нете найдешь как и почему [Ответ]
Boing747 06:55 22.09.2009
Andrei_ra, спсибо, ща посмотрю

DWanek, а что будет на выходе Pixels[i, j] ? число? в каком формате? как определить какой пиксель светлее а какой темнее? [Ответ]
Yandex 07:37 22.09.2009
Boing747, открой для себя волшебный мир F1. А если вдруг на клавиатуре этой кнопки нет, то http://drkb.ru/ [Ответ]
DWanek 10:15 22.09.2009

Сообщение от Boing747:
а что будет на выходе Pixels[i, j] ?

Цвет пикселя:
property Pixels[X, Y: Integer]: TColor

Сообщение от Boing747:
число?

Можно и так сказать.

Сообщение от Boing747:
в каком формате?

type
TColor = -$7FFFFFFF-1..$7FFFFFFF;

Сообщение от Boing747:
как определить какой пиксель светлее а какой темнее?

Два дворда сравнить. [Ответ]
Yandex 10:37 22.09.2009
DWanek,

Сообщение от :
Два дворда сравнить.

Не совсем уверен. Как мне кажется TColor хранит в формате RGB, а чтобы понять какой светлее - надо перевести RGB в YUV (http://ru.wikipedia.org/wiki/YUV) и потом сравнить яркость Y. [Ответ]
Andrei_ra 11:34 22.09.2009
лично сталкивался с проблемой Pixels, два абсолютно одинаковых изображения в bmp размером к примеру 16*16 пикселей по центру квадрат снова к примеру 8*8 пикселей отличного от фона цвета, сравниваю изображения ни идет и все тут, вывожу в memo список значений с обоих bitmap и цифры немного но разные, при этом ни какой зависимости не нахожу. С ScanLine все было удачно. [Ответ]
DWanek 12:05 22.09.2009

Сообщение от Yandex:
надо перевести RGB в YUV и сравнить Y

Отличный вариант. Но тут в любом случае автору решать. Смотря что ему нужно. Может он хочет компоненты цветов отдельно сравнивать. Есть несколько значений, а там уж что нужно, то и делай.

Andrei_ra, Может проблема в палитре была. Я, честно сказать, про сканлайны не очень много знаю. Просто вопрос то был именно про цвет i-того и j-того пикселя. [Ответ]
Yandex 12:28 22.09.2009
Andrei_ra, надо было debug-нуть и посмотреть что там в сырцах творят. Скорее всего баг есть в них. [Ответ]
Boing747 16:54 06.10.2009
всем спасибо, очень помогли... теперь вторая загвоздка: как из картинки скопировать в другую переменную прямоугольный кусок с координатами (х,у,х1,у1)? [Ответ]
shader 14:16 07.10.2009
Boing747 Graphics.TCanvas.CopyRect
В хелпе подробно прочитаешь параметры, которые туда нужно передать. Вызывать, cоответственно, <твой битмап>.Canvas.CopyRect() [Ответ]
Boing747 16:28 07.10.2009
спсибо попробую.. [Ответ]
Boing747 12:22 08.10.2009
попробывал, вот код:

Сообщение от :
Form1.Canvas.Draw(0, 0, bm);
s1:= TBitMap.Create;
s1.Canvas.CopyRect(Rect(0, 0, bm.Width, bm.Height), bm.Canvas, Bounds(20, 10, 50, 40));

чо не так? вот ошибка Делфи и собственно ошибка приложения, какие будут соображения? что не так?
Изображения
Нажмите на изображение для увеличения
Название: delphi.jpg
Просмотров: 17
Размер:	18.7 Кб
ID:	560094   Нажмите на изображение для увеличения
Название: proga.jpg
Просмотров: 15
Размер:	12.7 Кб
ID:	560095  

[Ответ]
Nagwal 01:35 06.12.2009
Уважаемые!!!
Подскажите пожалуйста, как из загруженного в Image рисунка выбрать все цвета?
Допустим, чтобы все цвета данного рисунка отобразились либо в DrawGrid либо где предложите.
Помогите пожалуйста!!))) [Ответ]
Yandex 01:48 06.12.2009
Nagwal, интересные вопросы мучают полтретьего ночи [Ответ]
Nagwal 01:55 06.12.2009
Я в германии, у меня только час, долблюсь над прогой, помогите [Ответ]
Yandex 02:03 06.12.2009
Nagwal, еще не вечер. Час это очень мало.
P.S. Выше я приводил ссылку что стоит читать, но видимо чукча писатель... [Ответ]
Nagwal 21:55 08.12.2009
Ничего я там не нашёл. Ну что, трудно подсказать? [Ответ]
Yandex 22:36 08.12.2009
Nagwal, тяжелый случай. Слишком сложную ты себе задачу поставил.

Рассказываю что делать:
1. Грузишь картинку в TImage
2. Используя scanline или Pixel[i, j] читаешь данные картинки, попутно сладируя прочитанные цвета в массив TColor. Прежде чем добавить цвет, пробегаешь по массиву, и смотришь, что его нет.
3. После того, как картинку всю обошел, выводишь данные в TGrid.

И в чем проблема то?
Код писать не буду, и другим не советую. [Ответ]
Nagwal 00:27 09.12.2009
вот раньше бы так. огромное спасибо. помогло))) [Ответ]
Boing747 20:36 01.03.2010
Проблема с копированием так и не решена(((
bm1.Canvas.CopyRect(Rect1,bm2,rect2);
rect1,rect2: TRect;
bm2- источник откуда копируется
bm1-конечный рисунок
rect2- координаты копируемого прямоугольника на источнике
rect1- координаты по которым надо вставить прямоугольник в bm1

В теории все понятно и просто, на практике bm1 получается пустой. ЧТО НЕ ТАК? ОЧЕНЬ НАДО!!! [Ответ]
панкснотдед 09:40 05.05.2010
Boing747, товарисч, из вашего примера ничего не понятно. На какой строчке вылетает ошибка? Можно полный код процедуры? А то гадать по трём строчкам... [Ответ]
Вверх