Einzelnen Beitrag anzeigen

Dax
(Gast)

n/a Beiträge
 
#2

Re: Problem mit Pointer auf dyn. Array

  Alt 28. Jun 2008, 04:38
Ein Pointer kostet vier Byte, demnach kostet dich MyLine auch nur vier Byte. Und der Grund, warum du SetLength nicht anwenden kannst: du hast keinen Speicher für das Array reserviert, das müsstest du erst mit New(MyLine) tun. Dann würde aber der Zugriff auf ScanLine nicht mehr richtig funktionieren. In solchen Fällen benutzt man aber meist keine Arrays, sondern typisierte Pointer:
Delphi-Quellcode:
function MergeTextToBitmap(aBitmap: TBitmap; aString: String): TBitmap;
var
  iHeight,
  iWidth,
  iBitCount: Integer;
  MyLine: ^TRGBTriple;
begin
  iBitCount:= 0;
  aString:= IntToStr(Length(aString)) + '/' + aString;
  aBitmap.PixelFormat:= pf24Bit;
  for iHeight:= 0 to aBitmap.Height - 1 do
  begin
    MyLine:= aBitmap.ScanLine[iHeight];
    for iWidth:= 0 to aBitmap.Width - 1 do
    begin
      if not ((iBitCount + 1) > (Length(aString) * 8)) then
        MyLine^.rgbtRed:= (MyLine^.rgbtRed and $FE)
          or ((Ord(aString[(iBitCount div 8) + 1])
          shr (iBitCount mod 8)) and $01);
      Inc(iBitCount);
      Inc(MyLine);
    end;
  end;
  Result:= aBitmap;
end;
  Mit Zitat antworten Zitat