Автор: Maks150988
Дата сообщения: 25.03.2009 17:04
ShIvADeSt
Все, разобрался. После GdipDrawImageRect.
GdipCreateHBITMAPFromBitmap(GdiImage, hImage, ARGB(0, 255, 0, 255));
И в результат помещаем hImage, который у нас объявлен как hBitmap в var.
Вобщем пока непонятно одно - фоновый цвет картинки. В модулях GDI+ под делфи прототип этой функцией выглядит ARGB. Непонятно как фон нужный задать - почему-то значение Blue "работает", а остальные в нулевом значении остаются. И в итоге результирующий цвет фона вида ргб(0,0,255), хотя мне нужен цвет фуксия - (255,0,255).
Модуль GDI+ для работы с изображением.
Код: unit F_GdiPlus;
interface
uses
Windows;
const
WINGDIPDLL = 'gdiplus.dll';
type
GDIPlusStartupInput = record
GdiPlusVersion : Integer;
DebugEventCallback : Integer;
SuppressBackgroundThread: Integer;
SuppressExternalCodecs : Integer;
end;
function GdiplusStartup(var token: Integer; var lpInput: GDIPlusStartupInput; lpOutput: Integer): Integer; stdcall; external WINGDIPDLL;
function GdiplusShutdown(var token: Integer): Integer; stdcall; external WINGDIPDLL;
function GdipCreateFromHDC(hDC: HDC; var Graphics: Cardinal): Integer; stdcall; external WINGDIPDLL;
function GdipLoadImageFromFile(FileName: PWideChar; var Image: Cardinal): Integer; stdcall; external WINGDIPDLL;
function GdipGetImageWidth(Image: Cardinal; var Width: UINT): Integer; stdcall; external WINGDIPDLL;
function GdipGetImageHeight(Image: Cardinal; var Height: UINT): Integer; stdcall; external WINGDIPDLL;
function GdipDrawImageRect(Graphics: Cardinal; Image: Cardinal; X, Y, Width, Height: Single): Integer; stdcall; external WINGDIPDLL;
function GdipDisposeImage(Image: Cardinal): Integer; stdcall; external WINGDIPDLL;
function GdipDeleteGraphics(Graphics: Cardinal): Integer; stdcall; external WINGDIPDLL;
function GdipCreateHBITMAPFromBitmap(Graphics: Cardinal; var Bitmap: hBitmap; Background: TColorRef): Integer; stdcall; external WINGDIPDLL;
function ARGB(A, R, G, B: Byte): TColorRef;
var
hGDILib : Cardinal;
StartUpInfo: GDIPlusStartupInput;
GdipToken : Integer;
implementation
function ARGB(A, R, G, B: Byte): TColorRef;
begin
Result := (DWORD(b) or (DWORD(g) shl 8) or (DWORD(r) shl 16) or (DWORD(a) shl 24));
end;
end.