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-25 23:31:00) [21]

> homm  (25.09.2007 23:26:19)  [19]

Меня все устраивает.


Suchair   (2007-09-25 23:31:00) [22]

получил ряд точек яркостью от 0 до 255

for x:=0 to 255 do
begin
c:=x*65793;
Image1.Canvas.Pixels[x,1]:=c;
end;

очень криво, но работает

щас попробую алгоритм homm-а


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

> [18] Anatoly Podgoretsky ©   (25.09.07 23:24)

Отлично, тогда [0] перечитайте, и скажите, что Вас там не устраивает?


Anatoly Podgoretsky   (2007-09-25 23:24:00) [24]

> homm  (25.09.2007 23:12:14)  [14]

У нас, для нас нет проблем с пониманием что такое цвет и форматы.


homm   (2007-09-25 23:23:00) [25]

procedure TForm1.FormCreate(Sender: TObject);
begin
 Image1.Picture.Bitmap := TBitmap.Create;
 with Image1.Picture.Bitmap do begin
   HandleType := bmDIB;
   PixelFormat := pf32bit;
   Width := 256;
   Height := 256;
 end;
end;

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;


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

> [11] Suchair   (25.09.07 23:04)
> var
> x:integer;
> begin
> Image1.Picture.Bitmap:=TBitmap.Create;
> Image1.Picture.Bitmap.PixelFormat:=pf8bit;
> for x:=0 to 255 do
> Image1.Canvas.Pixels[x,1]:=x;
> end;

Image1.Repaint;


homm   (2007-09-25 23:13:00) [27]

> Что дляВас


homm   (2007-09-25 23:12:00) [28]

> [13] Anatoly Podgoretsky ©   (25.09.07 23:07)
> Не может быть 2^16 серого ни для RGB - R=G=B, ни для GrayScale
> - палитра всего имеет 256 вхождений

Что ждя вас есть сочетание этих 3-х букв? 3 компонента цвета, синий, красный, зеленый. В этиз 3-х буквах есть утверждение, что для хранения каждой компонеты используется 8 бит? Видмо нет. Тоже самое и для палитры. Никто не сказал, что она 8-и битная. Да и слова эти RGB и GrayScale Вы сам же и первый написали в [12].

Так что я еше раз апрашиваю, Формата такого быть не может? Или отобразить нельзя?


Anatoly Podgoretsky   (2007-09-25 23:07:00) [29]

Что не возможно? Формата такого быть не может? Или отобразить нелзя? И то и другое — чушь.
Не может быть 2^16 серого ни для RGB - R=G=B, ни для GrayScale - палитра всего имеет 256 вхождений


Anatoly Podgoretsky   (2007-09-25 23:05:00) [30]

> homm  (25.09.2007 22:41:10)  [10]

Еще раз GrayScale - это 8 бит с палитрой
Оттенки серого это когда R=G=B


Suchair   (2007-09-25 23:04:00) [31]

to Pavia
Так не получается.
вот код который я пробовал:

var
x:integer;
begin
Image1.Picture.Bitmap:=TBitmap.Create;
Image1.Picture.Bitmap.PixelFormat:=pf8bit;
for x:=0 to 255 do
Image1.Canvas.Pixels[x,1]:=x;
end;
ничего при этом не происходит. Компонент Image как был пустым так и остался.

если закоментировать строки:
Image1.Picture.Bitmap:=TBitmap.Create;
Image1.Picture.Bitmap.PixelFormat:=pf8bit;

то в компоненте Image появляется ряд точек от черного до красного. а мне надобы белый


homm   (2007-09-25 22:41:00) [32]

> [6] Anatoly Podgoretsky ©   (25.09.07 22:07)
> Не возможно по определению, для RGB и для палитр.

Что не возможно? Формата такого быть не может? Или отобразить нелзя? И то и другое — чушь.


> [7] Anatoly Podgoretsky ©   (25.09.07 22:07)
> Ты про GrayScale или именно про оттенки?

А чем термин на английском языке отличается от термина на русском?


Pavia   (2007-09-25 22:35:00) [33]

для отоброжения тебе надо преобразовать в 256 гродаций серого. Просто взять каждый второй байт.

А вывод делается просто
Image1.Picture.Bitmap:=TBitmap.Create;
Image1.Picture.Bitmap.PixelFormat:=pf8bit; //или 24 бит или 32бита

Image1.Picture.Bitmap.Width:=Width;
Image1.Picture.Bitmap.Height:=Height;

Установка пикселя делается так
Image1.Canvas.Pixel[x,y]:=Color;
или так
Image1.Picture.Bitmap.ScanLine[(Height-y-1)*Len+x]:=Color;

PS. Писал прямо здесь без проверки.


Suchair   (2007-09-25 22:18:00) [34]

я про оттенки. на один пиксель отведено 2 байта.

но проблема то не в том как кодируется изображение.

считать два байта для каждого пикселя и получить значение яркости этого пикселя не проблема. даже преобразовать значение яркости из 0..2^16 к 0..255 тоже не проблема.
не получается нарисовать пиксель.


Anatoly Podgoretsky   (2007-09-25 22:07:00) [35]

> homm  (25.09.2007 21:47:05)  [5]

Ты про GrayScale или именно про оттенки?


Anatoly Podgoretsky   (2007-09-25 22:07:00) [36]

> Suchair  (25.09.2007 21:44:04)  [4]

> 2^16 градаций серого.

Не возможно по определению, для RGB и для палитр.


homm   (2007-09-25 21:47:00) [37]

> [4] Suchair   (25.09.07 21:44)

А ты преобразу то, что считано в 256 отенков серого на лету прямо.


Suchair   (2007-09-25 21:44:00) [38]

да, ошибся, изображение не монохромное. 2^16 градаций серого.
разрешение фиксированное.
считать его можно разными способами, а вот как его отобразить на форме то что считано.
TImage вроде не подходит, или у меня руки кривые....


Anatoly Podgoretsky   (2007-09-25 21:37:00) [39]

GrayScale это 8 бит + палитра
А 16 бит это R5G5B5 или R5G6B5 без палитры


tesseract   (2007-09-25 21:30:00) [40]


> когда можно обойтись одним битом? И ещё - разрешение картинки
> как будешь определять? Или оно известно заранее?


Разрешение фиксированное, изображение не монохромное, а GrayScale. Читаеться в массив Word - он как раз два байта.


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

Наверх

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