Можно поподробнее? Подскажешь - перепишу по-нормальному...
Я лично использовал TBitmap.Canvas.Pixels[x,y]...
Скачай DelphiX и юзай либо TDIB + TImage, либо DXDraw для отрисовки.
Отрисовка графики на 8bpp TDIB (4bpp planar/linear + 8bpp):
Procedure TileToPic(P: Pointer; W,H,TW,TH,BitCount: Integer; Rev: Boolean = True; Mat: TMatrix = NIL); var n,m,l,r,ByteCount: Integer; B,WB: ^Byte; begin B:=P; Pic.Width:=W*TW; Pic.Height:=H*TH; ByteCount:=W*BitCount div 8; For l:=0 To TH-1 do begin For r:=0 To TW-1 do begin For m:=0 To H-1 do begin Case BitCount of 4: begin WB:=Pointer(DWord(Pic.ScanLine[m+l*H])+r*W); For n:=0 To ByteCount-1 do begin If Rev Then WB^:=B^ and $F else WB^:=B^ SHR 4; Inc(WB); If Rev Then WB^:=B^ shr 4 else WB^:=B^ AND $F; Inc(WB); Inc(B); end; Dec(B,ByteCount); end; 8: Move(B^,Pointer(DWord(Pic.ScanLine[m+l*H])+r*W)^,W); end; Inc(B,ByteCount); end; end; end; end;
Отрисовка этого TDIB на TImage, Sc - масштаб:
Img.Canvas.CopyRect(Bounds(0,0,Pic.Width*Sc,Pic.Height*Sc),Pic.Canvas,Bounds(0,0,Pic.Width,Pic.Height));
А на DXDraw можно даже и таким же способом, как ты отрисовывать.
DXDraw.Surface.Canvas.Pixels[x,y]...
Но после полной отрисовки пикселей, необходимо выполнить две строки:
DXDraw.Surface.Canvas.Release;
DXDraw.Flip;
Они обновляют картинку.
Отредактировано HoRRoR (2008-06-20 12:09:13)