X
xopek160183
Hi всем. Появился такой вопрос: прога должная брать картинку и анализировать ее содержимое по цветам пикселей. Изначально подразумевается, что картинка серая (или в крайнем случае черно-белая). Прога должна пробегать по всем пикселям и в зависимости от их цвета оставлять соответствующие записи в лог-файле анализа картинки.
Я на форме создал paitbox и для проверки две переменные bitmap и binmap1. В первую через диалог из файла загружаю картинку и затем через scanline пытаюсь рассмотреть содержимое. Но че-то я не догоняю. Для проверки специально создал маленький рисуночек, в котором просто вертикальная толстая черная линия в середине белого фона.
Для проверки работы сделал следующее - после получения файла в bitmap, он анализируется и черные точки должны быть заменены например на красные. Кусок пробного кода:
Казалось бы - банальная задача, но не получается!
Я новичок в программировании на делфи и догнать не могу в сложившейся ситуации:
Значения p[x] принимают какие-то неожиданные значения (255, затем 248 и еще какие-то). И соответственно и преобразование осуществляется не то, которое должно быть. Также: Если разкоментить строку bitmap1:=bitmap, то копия рисунка рисуется рядом с первой, т.е. bitmap1 получает нормальное значение. А если она закоментирована, то ничего не выводится. Хотя если в цикле в строке bitmap1.Canvas.Pixels[x,y]:=clred убрать bitmap1 и рисовать непосредственно на канве формы, то рисунок (не тот который должен быт, но) по-точечно рисуется! Ничего понять не могу! Вечер просидел, мозг вынес, но так и не смог понять, что я не так делаю!!!
Плиз, помогите!
PS. Может есть какие-то другие варианты (алгоритмы) выполнения поставленной задачи?
Я на форме создал paitbox и для проверки две переменные bitmap и binmap1. В первую через диалог из файла загружаю картинку и затем через scanline пытаюсь рассмотреть содержимое. Но че-то я не догоняю. Для проверки специально создал маленький рисуночек, в котором просто вертикальная толстая черная линия в середине белого фона.
Для проверки работы сделал следующее - после получения файла в bitmap, он анализируется и черные точки должны быть заменены например на красные. Кусок пробного кода:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
Bitmap, Bitmap1:Tbitmap;
x,y:integer;
p:pbytearray;
begin
bitmap:=tbitmap.Create;
bitmap1:=tbitmap.Create;
if OpenDialog1.Execute then
bitmap.LoadFromFile(opendialog1.FileName);
paintbox1.Canvas.Draw(0,0,Bitmap);
for y := 0 to BitMap.Height -1 do
begin
P := BitMap.ScanLine[y];
for x := 0 to BitMap.Width -1 do
if p[x]=clblack then
bitmap1.Canvas.Pixels[x,y]:=clred
end;
//bitmap1:=bitmap;
paintbox1.Canvas.Draw(bitmap.Width+2,0,bitmap1);
end;
Я новичок в программировании на делфи и догнать не могу в сложившейся ситуации:
Значения p[x] принимают какие-то неожиданные значения (255, затем 248 и еще какие-то). И соответственно и преобразование осуществляется не то, которое должно быть. Также: Если разкоментить строку bitmap1:=bitmap, то копия рисунка рисуется рядом с первой, т.е. bitmap1 получает нормальное значение. А если она закоментирована, то ничего не выводится. Хотя если в цикле в строке bitmap1.Canvas.Pixels[x,y]:=clred убрать bitmap1 и рисовать непосредственно на канве формы, то рисунок (не тот который должен быт, но) по-точечно рисуется! Ничего понять не могу! Вечер просидел, мозг вынес, но так и не смог понять, что я не так делаю!!!
Плиз, помогите!
PS. Может есть какие-то другие варианты (алгоритмы) выполнения поставленной задачи?