Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Чтение изображения


Страницы:   1 2 3

Suchair ©   (2007-09-25 20:58:00) 

Здрасьте.

Вобщем есть файл, в нем записано монохромное изображение с глубиной цвета 16 бит (2 байта на пиксель) подряд(без заголовков итд). как можно отобразить его на форме?
Спасибо.


Anatoly Podgoretsky   (2007-09-26 16:33:00) [1]

> Dimaxx  (26.09.2007 16:16:40)  [40]

GrayScale на самом деле не отдельный формат, это условно так названо, а формат 8 бит с палитрой, сменишь палитру получишь любую гамму цветов, не только шкала серого. Отдельного формата нет.


Dimaxx   (2007-09-26 16:16:00) [2]


> Зато все они умеют работать универсально с палитрами и безпалитровыми
> форматами типа RGB15, RGB16, RGB24, RGB32

Я не о том. Я о том, зачем хранить палитру, которая представлена индексами цветов, компоненты которых равны между собой и равны индексу цвета! Например, Bitmap. Формат хранит палитровые (и без) изображения. Следовательно, можно было бы сделать (когда разрабатывали формат или что-то в этом роде) так, чтобы при чтении файла, если глубина цвета 8 бит на пиксель и палитра отсутствует, значит изображение Grayscale. C точки зрения оптимизации было бы неплохо. К остальным форматам это применимо в том же направлении. Я ни в коей мере не призываю переделывать форматы, просто я бы сделал так. И если я "разработаю" для своих нужд граф. формат - я сделаю именно так.


Anatoly Podgoretsky   (2007-09-26 16:09:00) [3]

> homm  (26.09.2007 15:50:38)  [38]

Не вижу никакого повода тратить время на тривиальные вещи, если человек и поста в поста не понимает.


homm   (2007-09-26 15:50:00) [4]

> [37] Anatoly Podgoretsky ©   (26.09.07 15:47)

Оригинальный выход из положения, в котором не прав. Чем старше человек, тем труднее ему признать свои ошибки.


Anatoly Podgoretsky   (2007-09-26 15:47:00) [5]

> homm  (26.09.2007 15:23:36)  [36]

Я на тебе давно крест поставил. Аминь.


homm   (2007-09-26 15:23:00) [6]

> [35] Anatoly Podgoretsky ©   (26.09.07 15:17)

Может Вы, отвечая на пост, который был за 4 до вашего, хотя-бы номер его будете ставить?

И заодно признаете, что в [6] — чушь.


Anatoly Podgoretsky   (2007-09-26 15:17:00) [7]

homm ©   (26.09.07 15:15) [34]
Может быть перечитаешь тему и посмотришь кто предложил подобную бредовую вещь, поставлять изображение без палитры.


homm   (2007-09-26 15:15:00) [8]

> [33] Anatoly Podgoretsky ©   (26.09.07 15:12)
> Программ гигантское количество, включая доступ из разных
> браузеров, кто это будет делать?

Что делать? Зачем делать? Что за каша у Вас в голове?


Anatoly Podgoretsky   (2007-09-26 15:12:00) [9]

Программ гигантское количество, включая доступ из разных браузеров, кто это будет делать? Зато все они умеют работать универсально с палитрами и безпалитровыми форматами типа RGB15, RGB16, RGB24, RGB32


Dimaxx   (2007-09-26 14:45:00) [10]


> И кто тебе ее будет генерировать?

Тот модуль или библиотека, которая поддерживает данный формат.


homm   (2007-09-26 13:56:00) [11]

> [30] Anatoly Podgoretsky ©   (26.09.07 13:42)
> И кто тебе ее будет генерировать?

Это какое отношение имеет к делу? Кто хочет пусть тот и генерирует. Автор описал задачу коротко и четко (не считая ошибки про монохромность).


Anatoly Podgoretsky   (2007-09-26 13:42:00) [12]

И кто тебе ее будет генерировать?


Dimaxx   (2007-09-26 13:04:00) [13]

Кстати, по поводу Grayscale: я всегда удивлялся - зачем многие форматы (даже современные) хранят эту палитру?? Она же генерируется на раз-два.


homm   (2007-09-26 11:45:00) [14]

> [27] homm ©   (26.09.07 11:32)
> Собственно PNG позволяет хранить и RGBA с 16 битами на канал (64-х битное изображение).

И ему, PNG, как-то пофиг на то, что «GrayScale это 8 бит + палитра, а 16 бит это R5G5B5 или R5G6B5 без палитры» и «2^16 градаций серого не возможно по определению».


homm   (2007-09-26 11:32:00) [15]

> [26] Dimaxx ©   (26.09.07 10:28)
> Скорее всего это простое изображение с 256 оттенками просто
> "расширенное" до 16 бит ( вот только зачем?).

Задачи, они разный бывают. Градацию серого 16 бит на писксель (или GrayScale, что одно и тоже, только на разных языках) иможно хранить например в PNG. Собственно PNG позволяет хранить и RGBA с 16 битами на канал (64-х битное изображение).


Dimaxx   (2007-09-26 10:28:00) [16]


> > 2^16 градаций серого.
>
> Не возможно по определению, для RGB и для палитр.

Скорее всего это простое изображение с 256 оттенками просто "расширенное" до 16 бит (вот только зачем?). Либо это стандартное 15-битное изображение (5R+5G+5B). Разве нельзя представить в 15 битах серый цвет?

Автору. Попробуй считать массив в память, создать битмап известного тебе размера с глубиной цвета pf15bit и с помощью SetBitmapBits залить данные в картинку. Потом сохрани ее на диск и погляди что получится. Если получится белиберда - попробуй 16 бит (для эксперимента). Если и тут не получится - преобразовывай налету как предложил homm.


homm   (2007-09-26 06:49:00) [17]

> [24] homm ©   (26.09.07 06:46)

Вернее не так. По какому определеию не может быть «2^16 градаций серого»? По определеию термина «градаций серого»? Или по пределению слова «формат»?


homm   (2007-09-26 06:46:00) [18]

> [21] Anatoly Podgoretsky ©   (25.09.07 23:31)

Почему не возможно существование 2^16 градаций серого по определению?


homm   (2007-09-26 06:35:00) [19]

> [22] Suchair   (26.09.07 02:36)

Всем компонентам цвета одного пикселя присваивается одинаковое значение. Строка
DWORD(Line[j]) := J or (J shl 8) or J shl 16;
делает то-же самое, что могли бы делать строки
    Line[j].rgbBlue := J;
    Line[j].rgbGreen := J;
    Line[j].rgbRed := J;

Просто на делает это эффективнее.


Suchair   (2007-09-26 02:36:00) [20]


> procedure TForm1.Button1Click(Sender: TObject);
> type
>  ARGBQuad = array [0..0] of TRGBQuad;
>  ASingle = array [0..512] of Single;
> var
>  i,j: Integer;
>  Line: ^ARGBQuad;
> begin
>  for i := 0 to 255 do begin
>    Line := Image1.Picture.Bitmap.ScanLine[i];
>    for j := 0 to 255 do begin
>      DWORD(Line[j]) := J or (J shl 8) or J shl 16;
>    end;
>  end;

>  Image1.Repaint;
> end;


что то я не пойму как работате эта процедура.
Поясните пожалуйста.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо