Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.011 c
1-51776
Горлов Евгений
2002-12-04 14:25
2002.12.16
IDispatch type


3-51639
Jurden
2002-11-28 15:51
2002.12.16
Пробелы в стринговом поле


14-51937
Shved
2002-11-25 00:31
2002.12.16
Как перенести базу данных на другой компьютер?


1-51761
wetwired
2002-12-04 19:05
2002.12.16
Сохранение листа Excel в формате CSV из Дельфи


1-51708
Tundra
2002-12-06 06:56
2002.12.16
Вопрос по Паскалю. Перебор эл-ов множества.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский