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

Вниз

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

 
$HiC0 ©   (2003-05-13 15:15) [0]

Мне требуется добавить шума в некоторое изображение... размер которого 300 на 300, чего и я делаю следующим образом:
procedure TForm1.NoiseBtnClick(Sender: TObject);
type TArrayInt= array of Integer;
var i,j : integer;
P : PByteArray;
A : array of TArrayInt;
k : byte;
Bitmap : TBitmap;
Begin
Randomize;
BitMap := TBitMap.create;
Bitmap := Image2.Picture.Bitmap;
SetLength(A,Bitmap.height,BitMap.width);
for i := 0 to Bitmap.height-1 do
begin
P := BitMap.ScanLine[i];
for j := 0 to BitMap.width-1 do
Begin
k:=Random(255);
A[i][j]:=P[j];
P[j] := k;
End;
end;
Image2.Picture.Bitmap:=Bitmap;
end;

В результате рисунок зашумеляется не полностью, почему непонятно, т.е. такое ощущение что BitMap.width-1 и Bitmap.height-1 гораздо меньше 299... хорошо дай думаю в ручную поставлю эти значения... результат тот-же самый... в случае если циклы кручу больше чем до 300, вполне обоснованно возникает ошибка... складывается дурацкое ощущение что я работаю с пикселами разного размера :) причем по вертикали все работает как надо а по горизонтали зашумляется меньше чем на треть... что делать?
Заранее спасибо...


 
MBo ©   (2003-05-13 15:21) [1]

Какой PixelFormat?
Ты работаешь как с 8-битным.


 
$HiC0 ©   (2003-05-13 15:24) [2]

Большое спасибо, понимаю как мало я знаю :)


 
Sandman25   (2003-05-13 16:47) [3]

Я думаю, что на пиксель выделяется больше 1 байта - скорее всего 4 (если зашумляется меньше, чем на треть, как Вы написали). Тогда надо k:=Random(2 shl 31), а P объявить как PInteger.
Еще надо удалить BitMap := TBitMap.create.



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

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

Наверх




Память: 0.47 MB
Время: 0.012 c
1-83444
Zew
2003-05-14 19:05
2003.05.26
Сравнить текст


7-83762
Кот Джин
2003-03-28 14:48
2003.05.26
Как узнать версию Windows?


3-83393
bss
2003-05-06 14:02
2003.05.26
Сохранение поля типа TDateTime в базе MS Access (ADO)


1-83453
maker
2003-05-08 20:44
2003.05.26
Функции <=> Процедуры


1-83599
User
2003-05-14 15:07
2003.05.26
Обращение ко всем объектам класса