![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чтение изображения
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;
что то я не пойму как работате эта процедура.
Поясните пожалуйста.