Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Конвертация 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?


Наверх

Титульная страница Поиск, карта сайта Написать письмо