Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
FreePascal / Lazarus
|
Re: 2-Farben Bmp einlesen und im Array speichern
5. Okt 2009, 10:58
Hier mal eine Klasse von mir, die den Zugriff auf ein 2D-Boolean-Array kapselt (hab sie eben auf die Schnelle noch angepasst, hoffe, dass keine Fehler drin sind). Vielleicht kannst du ja was damit anfangen:
Delphi-Quellcode:
type
TBoolMap = class
private
FData: packed array of Boolean;
FWidth, FHeight: integer;
procedure SetHeight(const Value: integer);
procedure SetWidth(const Value: integer);
function GetPixelPtr(X,Y: integer): PBoolean;
function GetPixel(X,Y: integer): Boolean;
public
property Width: integer read FWidth write SetWidth;
property Height: integer read FHeight write SetHeight;
procedure LoadFromBitmap(BMP: TBitmap32);
procedure SetSize(AWidth, AHeight: integer);
property PixelPtr[X,Y: integer]: PBoolean read GetPixelPtr;
property Pixel[X,Y: integer]: Boolean read GetPixel;
end;
implementation
{ TBoolMap }
procedure TBoolMap.LoadFromBitmap(BMP: TBitmap);
var
SourcePtr: PColor;
StopPtr: PColor;
TargetPtr: PBoolean;
begin
SetSize(BMP.Width,BMP.Height);
BMP.PixelFormat := pf32Bit;
TargetPtr := PixelPtr(0,0);
SourcePtr := BMP.Scanline[0];
StopPtr := BMP.Scanline[BMP.Height-1];
inc(StopPtr, Bmp.Width-1);
While integer(SourcePtr) <= integer(StopPtr) do
begin
TargetPtr^ := (SourcePtr^ and $00FFFFFF) = $00000000;
inc(TargetPtr);
inc(SourcePtr);
end;
end;
function TBoolMap.GetPixelPtr(X, Y: integer): PBoolean;
begin
Result := @FData[Y * Width + X];
end;
function TBoolMap.GetPixel(X, Y: integer): Boolean;
begin
Result := GetPixelPtr(X,Y)^;
end;
procedure TBoolMap.SetHeight(const Value: integer);
begin
FHeight := Value;
SetLength(FData, FWidth*FHeight);
end;
procedure TBoolMap.SetSize(AWidth, AHeight: integer);
begin
FWidth := AWidth;
FHeight := AHeight;
SetLength(FData, FWidth*FHeight);
end;
procedure TBoolMap.SetWidth(const Value: integer);
begin
FWidth := Value;
SetLength(FData, FWidth*FHeight);
end;
|
|
Zitat
|