DenIvan, ты делаешь предположение, что битмап 24 бита на пиксел, но это не всегда так. Да и весь код какой-то странный, битмап сохраняется, потом загружается и всё это только для того, чтобы сохранить как текст. Приложенные изображения в градациях серого, может стоит писать в текст только одно значение, а не три одинаковых значения РГБ?
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
bmp: TBitmap;
scan: pByteArray;
x,y: integer;
r,g,b,gr: byte;
txt: TStringList;
str: string;
begin
if OpenPictureDialog1.Execute then begin
bmp:=TBitmap.Create;
with TPicture.Create do begin
LoadFromFile(OpenPictureDialog1.FileName);
bmp.Assign(Graphic);
Free;
end;
bmp.PixelFormat:=pf24bit;
txt:=TStringList.Create;
txt.Add('W:'+IntToStr(bmp.Width)+' H:'+IntToStr(bmp.Height));
for y:=0 to bmp.Height-1 do begin
scan:=bmp.ScanLine[y]; str:='';
for x:=0 to bmp.Width-1 do begin
r:=scan[x*3+2]; g:=scan[x*3+1]; b:=scan[x*3+0];
str:=str+'R'+IntToStr(r)+'G'+IntToStr(g)+'B'+IntToStr(b);
//gr:=round(0.299*r+0.587*g+0.114*b);
//str:=str+IntToStr(gr)+'|';
end;
txt.Add(str);
end;
txt.SaveToFile('image.txt');
txt.Free;
bmp.Free;
end;
end;