Главная страница
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.013 c
3-83352
Ш-К
2003-05-06 01:53
2003.05.26
Авторизация пользователей.


3-83320
Mechanikus
2003-05-03 23:33
2003.05.26
подсветка в DBGrid поля удовлетворяющего условию


6-83626
BGV
2003-03-26 14:11
2003.05.26
Как определить, что соединение разорвано? (Indy, FTP)


1-83565
Till
2003-05-13 06:16
2003.05.26
Сумма значений ячеек в столбце


3-83418
Taktic
2003-05-06 03:41
2003.05.26
Сетевая база данных MS SQL 7.0 Delph6 ADO