Форум: "Основная";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
ВнизОтрисовка на 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c