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