你要处理什么?没有必要分成单独的三个二维数组吧?可以把整幅图片存在一个二维数组里.
JPG需要JPEG.PAS支持,如果程序包了这个单元,可从OPENDISLOG直接打开并将其转换为BMP格式
参考源码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, ExtDlgs, ExtCtrls, jpeg, Buttons;
type
TRGBArray = ARRAY[0..32767] OF TRGBTriple;//定义一维数组,每元素为TRGBTriple类
pRGBArray = ^TRGBArray;
implementation
{$R *.DFM}
procedure TForm1.CopyMe(tobmp: TBitmap; frbmp : TGraphic);
begin
tobmp.Width := frbmp.Width;
tobmp.Height := frbmp.Height;
tobmp.PixelFormat := pf24bit;
tobmp.Canvas.Draw(0,0,frbmp);
end;
//打开图片并完成转换JPG->BMP
procedure TForm1.Button2Click(Sender: TObject);
var
B : pRGBArray; // Scanlines
x, y : integer;
begin
if OpenPictureDialog1.Execute then begin
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
CopyMe(OriginalBMP,Image1.Picture.Graphic);
//对OriginalBMP进行处理
for y := 0 to OriginalBMP.Height - 1 do begin // Walk scanlines
B := OriginalBMP.ScanLine[y]; //逐行扫描
// Now do the main piece
for x:= 1 to OriginalBMP.Width - 1 do begin // 处理每一个象素
Temp1[x,y]:= B[x].rgbtRed ; //分别取每个象素的R、G、B值,在这里把它们分别赋给三个不同的二维数组
.....:= B[x].rgbtgreen ;
.....:= B[x].rgbtBlue ;
end;
end;
end;