DenIvan, ты делаешь предположение, что битмап 24 бита на пиксел, но это не всегда так. Да и весь код какой-то странный, битмап сохраняется, потом загружается и всё это только для того, чтобы сохранить как текст. Приложенные изображения в градациях серого, может стоит писать в текст только одно значение, а не три одинаковых значения РГБ?
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 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);
end ;
txt . Add(str);
end ;
txt . SaveToFile( 'image.txt' );
txt . Free;
bmp . Free;
end ;
end ;
|