![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Конвертация TBitmap в TGPBitmap
Беликов А.А © (2010-05-04 10:08:00)Какие еще способы есть, кроме кривой переливки байтов из TBitmap в TGpBitmap ?
Пример способа переливки:
var
BMP: TBitmap;
GPBMP: TGPBitmap;
Info: PBitmapInfo;
Image: Pointer;
InfoSize, ImageSize: Cardinal;
begin
BMP := TBitmap.Create;
BMP.LoadFromFile('1.bmp');
GetDIBSizes(BMP.Handle, InfoSize, ImageSize);
Image := AllocMem(ImageSize);
Info := AllocMem(InfoSize);
GetDIB(BMP.Handle, 0, Info^, Image^);
GPBMP := TGPBitmap.Create(Info^, Image);
Andy BitOff (2010-05-05 10:00:00) [1]Вчера не до того было =)
Вот сегодня.
implementation
uses
ActiveX;
{$R *.dfm}
type
TFixedStreamAdapter = class(TStreamAdapter)
public
function Stat(out statstg: TStatStg; grfStatFlag: Longint): HResult; override; stdcall;
end;
{ TFixedStreamAdapter }
function TFixedStreamAdapter.Stat(out statstg: TStatStg; grfStatFlag: Integer): HResult;
begin
Result := inherited Stat(statstg, grfStatFlag);
statstg.pwcsName := nil;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
bmp: TBitMap;
image: TGPBitmap;
graphics : TGPGraphics;
strm: TStream;
begin
bmp := TBitmap.Create;
strm := TMemoryStream.Create;
try
ImageList1.GetBitmap(0, bmp);
bmp.SaveToStream(strm);
image := TGPBitmap.Create(TFixedStreamAdapter.Create(strm));
graphics := TGPGraphics.Create(Canvas.Handle);
graphics.DrawImage(Image, 50, 50);
graphics.Free;
image.Free;
finally
strm.Free;
bmp.Free;
end;
end;
Andy BitOff (2010-05-04 16:09:00) [2]Тогда кури Stream Save/Load
Беликов А.А (2010-05-04 15:32:00) [3]
> Andy BitOff © (04.05.10 10:48) [1]
> А в чем задача? Почему сразу не загрузить .bmp в GPBMP?
Битмап находится в TImageList. Точнее выдергивается из него методом GetBitmap.
Andy BitOff (2010-05-04 10:48:00) [4]А в чем задача? Почему сразу не загрузить .bmp в GPBMP?