unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Menus;type
TFormRGBValues = class(TForm)
ButtonReadBMP: TButton;
OpenDialog1: TOpenDialog;
procedure ButtonReadBMPClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
FormRGBValues: TFormRGBValues;implementation{$R *.dfm}
const
FileSignature = 'RGB:';
type
TRGBTripleArray = array[WORD] of TRGBTriple;
pRGBTripleArray = ^TRGBTripleArray;
procedure BitmapToRGBValues(const BMPFilename: string;
const DataFilename: string);
var
Bitmap: TBitmap;
DataFile: TextFile;
i: INTEGER;
j: INTEGER;
row: pRGBTripleArray;
begin
Bitmap := TBitmap.Create;
try
Bitmap.LoadFromFile(BMPFilename);
Bitmap.PixelFormat := pf24bit;
// 24bit位图
Assignfile(DataFile, DataFilename);
REWRITE(DataFile);
//打开文本文件
WRITELN(DataFile, FileSignature);
//写入文件签名
WRITELN(DataFile, Bitmap.Width, ' ', Bitmap.Height);
//文件大小
for j := 0 to Bitmap.Height - 1 do
begin
row := Bitmap.Scanline[j];
WRITE(DataFile, 'R ');
for i := 0 to Bitmap.Width - 1 do
begin
WRITE(DataFile, row[i].rgbtRed: 4);
//输出红色分量到文件,间距为4个位宽
end;
WRITELN(Datafile);
//换行
WRITE(DataFile, 'G ');
for i := 0 to Bitmap.Width - 1 do
begin
WRITE(DataFile, row[i].rgbtGreen: 4);
//输出绿色分量到文件,间距为4个位宽
end;
WRITELN(DataFile);
//换行
WRITE(DataFile, 'B ');
for i := 0 to Bitmap.Width - 1 do
begin
WRITE(DataFile, row[i].rgbtBlue: 4);
//输出蓝色分量到文件,间距为4个位宽
end;
WRITELN(DataFile)
//换行
end;
CloseFile(DataFile);
//关闭文件
finally
Bitmap.Free
end;
end;procedure TFormRGBValues.ButtonReadBMPClick(Sender: TObject);
begin
if opendialog1.Execute then
begin
BitmapToRGBValues(opendialog1.filename, 'Pixels.Txt')
end;end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Menus;type
TFormRGBValues = class(TForm)
ButtonReadBMP: TButton;
OpenDialog1: TOpenDialog;
procedure ButtonReadBMPClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
FormRGBValues: TFormRGBValues;implementation{$R *.dfm}
const
FileSignature = 'RGB:';
type
TRGBTripleArray = array[WORD] of TRGBTriple;
pRGBTripleArray = ^TRGBTripleArray;
procedure BitmapToRGBValues(const BMPFilename: string;
const DataFilename: string);
var
Bitmap: TBitmap;
DataFile: TextFile;
i: INTEGER;
j: INTEGER;
row: pRGBTripleArray;
begin
Bitmap := TBitmap.Create;
try
Bitmap.LoadFromFile(BMPFilename);
Bitmap.PixelFormat := pf24bit;
// 24bit位图
Assignfile(DataFile, DataFilename);
REWRITE(DataFile);
//打开文本文件
WRITELN(DataFile, FileSignature);
//写入文件签名
WRITELN(DataFile, Bitmap.Width, ' ', Bitmap.Height);
//文件大小
for j := 0 to Bitmap.Height - 1 do
begin
row := Bitmap.Scanline[j];
WRITE(DataFile, 'R ');
for i := 0 to Bitmap.Width - 1 do
begin
WRITE(DataFile, row[i].rgbtRed: 4);
//输出红色分量到文件,间距为4个位宽
end;
WRITELN(Datafile);
//换行
WRITE(DataFile, 'G ');
for i := 0 to Bitmap.Width - 1 do
begin
WRITE(DataFile, row[i].rgbtGreen: 4);
//输出绿色分量到文件,间距为4个位宽
end;
WRITELN(DataFile);
//换行
WRITE(DataFile, 'B ');
for i := 0 to Bitmap.Width - 1 do
begin
WRITE(DataFile, row[i].rgbtBlue: 4);
//输出蓝色分量到文件,间距为4个位宽
end;
WRITELN(DataFile)
//换行
end;
CloseFile(DataFile);
//关闭文件
finally
Bitmap.Free
end;
end;procedure TFormRGBValues.ButtonReadBMPClick(Sender: TObject);
begin
if opendialog1.Execute then
begin
BitmapToRGBValues(opendialog1.filename, 'Pixels.Txt')
end;end;end.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货