Главная страница
    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.012 c
1-51693
Маленький
2002-12-05 21:28
2002.12.16
Как закрыть чужое приложение из своей программы?


14-51928
vaneks
2002-11-25 13:01
2002.12.16
Системные папки МастДай


1-51803
Uran
2002-12-05 09:48
2002.12.16
Как запретить возможность перtтаскивания дочерней формы в MDI?


1-51782
lety
2002-12-04 22:12
2002.12.16
Курсор в мемо


4-52026
GOD
2002-11-05 02:24
2002.12.16
Вопрос № 3





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский