Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.16;
Скачать: CL | DM;

Вниз

Отрисовка на Bitmap   Найти похожие ветки 

 
Sergey123   (2002-12-04 10:43) [0]

как на Bitmap отобразить массив точек 0..65500, т.е. получить 16bit изображение


 
MBo ©   (2002-12-04 14:02) [1]

задачу поподробнее.
Подозреваю, что SetDiBits подойдет


 
Sergey123   (2002-12-04 14:06) [2]

есть массив 512х512 точек, диапазон от -32000 до 32000, необходимо отобразить его на Image


 
MBo ©   (2002-12-04 14:11) [3]

да, SetDiBits подойдет, только соответствие цветов числам будет экзотическим. Возможно, стоит рисовать в 256-цветном режиме, установив подходящую палитру


 
Sergey123   (2002-12-04 14:24) [4]

Если есть кусочек кода, можно? Как установить подходящую палитру?


 
MBo ©   (2002-12-04 14:55) [5]

здесь используется палитра в оттенках серого
твой массив придется перевести в байтовый
вместо SetBitmapBits можно SetDiBits, заполнив предварительно струтуру TBitmapInfo

procedure TForm1.Button1Click(Sender: TObject);
var a:array[0..255,0..255] of byte;
ct:array[0..255] of TRGBQuad;
b:tbitmap;
i,j:integer;
begin
b:=tbitmap.create;
b.pixelformat:=pf8bit;
b.Width := 256;
b.Height := 256;
for i:=0 to 255 do begin
ct[i].rgbRed:=i;
ct[i].rgbBlue:=i;
ct[i].rgbGreen:=i;
ct[i].rgbReserved:=0;
end;
for i:=0 to 255 do for j:=0 to 255 do a[i,j]:=trunc(sqrt(i*j));
SetDIBColorTable(b.canvas.Handle,0,$100,ct);
SetBitmapBits(b.Handle, sizeof(a),@a);
Image1.picture.assign(b);
b.free;

end;


 
Sergey123   (2002-12-04 15:07) [6]

а у меня числа в диапазоне -32000 до 32000, может лучше pf16bit и, что тогда получается изменится


 
MBo ©   (2002-12-04 15:12) [7]

b.pixelformat:=pf16bit;
палитру не надо устанавливать - в таком режиме ее нет.
Но получится цветовая абстракция.


 
Sergey123   (2002-12-04 15:19) [8]

Я сделал следующее:
procedure TForm1.Button2Click(Sender: TObject);
var //a:array[0..511,0..511] of word;
ct:array[0..511] of TRGBQuad;
b:tbitmap;
i,j:integer;
f: file;
a: array [0..511, 0..511] of Smallint;
begin
AssignFile(f, "1");
Reset(f, 1);
try
BlockRead(f, a, SizeOf(a));
finally
CloseFile(f);
end;
b:=tbitmap.create;
b.pixelformat:=pf16bit;
b.Width := 512;
b.Height := 512;
{for i:=0 to 511 do begin
ct[i].rgbRed:=i;
ct[i].rgbBlue:=i;
ct[i].rgbGreen:=i;
ct[i].rgbReserved:=0;
end;}
// for i:=0 to 511 do
//for j:=0 to 511 do
//a[i,j]:=trunc(sqrt(i*j));
// SetDIBColorTable(b.canvas.Handle,0,$200,ct);
SetBitmapBits(b.Handle, sizeof(a),@a);
Image1.picture.assign(b);
b.free;
end;
ничего не нарисовал


 
Sergey123   (2002-12-04 15:24) [9]

Уже нарисовал!

Не могли бы вы мне подсказать, как в таком случае манипулировать цветами полученного изображения (нормируя элементы массива? или как?) и как сделать его черно-белым?


 
MBo ©   (2002-12-04 15:27) [10]

procedure TForm1.Button3Click(Sender: TObject);
var a:array[word] of word;
b:tbitmap;
i,j:integer;
begin
b:=tbitmap.create;
b.pixelformat:=pf16bit;
b.Width := 256;
b.Height := 256;
for i:=0 to 65535 do
a[i]:=i;
SetBitmapBits(b.Handle, sizeof(a),@a);
Image1.picture.assign(b);
b.free;
end;


 
MBo ©   (2002-12-04 15:33) [11]

procedure TForm1.Button4Click(Sender: TObject);
var aw:array[word] of word;
ab:array[word] of byte;
ct:array[0..255] of TRGBQuad;
b:tbitmap;
i,j:integer;
begin
b:=tbitmap.create;
b.pixelformat:=pf8bit;
b.Width := 256;
b.Height := 256;
for i:=0 to 255 do begin
ct[i].rgbRed:=i;
ct[i].rgbBlue:=i;
ct[i].rgbGreen:=i;
ct[i].rgbReserved:=0;
end;
for i:=0 to 65535 do // а у тебя здесь загрузка будет
aw[i]:=i;
for i:=0 to 65535 do
ab[i]:=aw[i] shr 8;
SetDIBColorTable(b.canvas.Handle,0,$100,ct);
SetBitmapBits(b.Handle, sizeof(ab),@ab);
Image1.picture.assign(b);
b.free;
end;


 
Sergey123   (2002-12-04 15:44) [12]

А у меня массив то из 262144 элементов


 
MBo ©   (2002-12-04 15:48) [13]

это уж сам догадайся, как модифицировать ;)


 
Sergey123   (2002-12-04 15:52) [14]

a: array [0..511, 0..511] of smallint;
Модифицировал:
for i:=0 to 511 do
for j:=0 to 511 do
a[i,j] := a[i,j] shr TrackBar5.Position;
картинка не очень хороша получается, ну, а как ее в ч.б. превратить?


 
MBo ©   (2002-12-04 16:03) [15]

> a[i,j] := a[i,j] shr TrackBar5.Position;
для 256-цветного режима нужно байтовый массив сделать

>как ее в ч.б. превратить?
MBo © (04.12.02 15:33)


 
Sergey123   (2002-12-04 16:21) [16]

но у меня то 65535 цветов


 
MBo ©   (2002-12-04 16:25) [17]

можно сделать только 256 градаций серого в 256-цветном режиме с соотв. палитрой или в 24-битном (16М)режиме, а в 16-битном (64К) - только 32 градации.


 
Sergey123   (2002-12-04 16:28) [18]

Если знаете где про это (Bitmap, Scanline, 16bit, 8bit ...) можно подробнее почитать, подскажите?

Спасибо за помощь.


 
MBo ©   (2002-12-04 16:31) [19]

в хелпе, в msdn.microsoft.com, в книгах



Страницы: 1 вся ветка

Текущий архив: 2002.12.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.011 c
3-51585
AM
2002-11-27 13:33
2002.12.16
Как понимать ошибку?


1-51709
lovres
2002-12-05 23:49
2002.12.16
Помогите с элементарным классом


7-51979
msgipss
2002-10-16 10:43
2002.12.16
Можно ли автоматом внести задание в планировщик Windows 2000


1-51748
asusfi
2002-12-04 16:33
2002.12.16
bsNone для ComboBox


7-51976
msgipss
2002-10-16 10:46
2002.12.16
сорри, предыдущая мессага не в тему, Как проверить работу колеса