![]() |
|
#3
|
|||
|
|||
![]() 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; |