correct TBitmap ReleaseHandle, ReleaseMaskHandle and ReleasePalette

git-svn-id: trunk@13308 -
This commit is contained in:
paul 2007-12-13 02:29:23 +00:00
parent 2e413c5941
commit 0383724536
3 changed files with 34 additions and 8 deletions

View File

@ -1079,8 +1079,10 @@ type
protected
procedure FreeHandle; override;
procedure FreeMaskHandle;
procedure FreePalette;
function ReleaseHandle: HBITMAP;
function ReleaseMaskHandle: HBITMAP;
function ReleasePalette: HPALETTE;
function IsEmpty: boolean;
function GetPixelFormat: TPixelFormat;
public

View File

@ -560,7 +560,10 @@ end;
procedure TBitMap.PaletteNeeded;
begin
if (FImage.FPalette <> 0) then exit;
// ToDo
//CreatePalette;
end;
procedure TBitmap.UnshareImage(CopyContent: boolean);
@ -1091,13 +1094,14 @@ end;
// useful for creating a HBitmap
function TBitmap.ReleaseHandle: HBITMAP;
begin
//HandleNeeded; Delphi creates a handle. Why?
HandleNeeded;
FreeCanvasContext;
Result := FImage.ReleaseHandle;
end;
function TBitmap.ReleaseMaskHandle: HBITMAP;
begin
MaskHandleNeeded;
FreeCanvasContext;
Result := FImage.ReleaseMaskHandle;
end;
@ -1105,6 +1109,11 @@ end;
function TBitmap.ReleasePalette: HPALETTE;
begin
// ToDo
{
PaletteNeeded;
FreeCanvasContext;
Result := FImage.ReleasePaletteHandle;
}
Result := 0;
end;
@ -1252,7 +1261,8 @@ end;
function TBitmap.GetPalette: HPALETTE;
begin
Result:=inherited GetPalette;
PaletteNeeded;
Result := FImage.FPalette;
end;
function TBitmap.GetWidth: Integer;

View File

@ -32,7 +32,7 @@ end;
function TBitmapImage.HandleAllocated: boolean;
begin
Result:=FHandle<>0;
Result := FHandle <> 0;
end;
function TBitmapImage.GetHandleType: TBitmapHandleType;
@ -52,12 +52,12 @@ end;
procedure TBitmapImage.FreeHandle;
begin
FreeMaskHandle;
FreePalette;
if (FHandle <> 0) and (FHandle <> FDIBHandle) then
begin
DeleteObject(FHandle);
end;
FHandle := 0;
FPalette := 0;
end;
procedure TBitmapImage.FreeMaskHandle;
@ -69,16 +69,25 @@ begin
end;
end;
procedure TBitmapImage.FreePalette;
begin
if FPalette <> 0 then
begin
DeleteObject(FPalette);
FPalette := 0;
end;
end;
function TBitmapImage.ReleaseHandle: HBITMAP;
// simply return the current handle and set to 0 without freeing handles
begin
Result:=FHandle;
Result := FHandle;
if FHandle = FDIBHandle then
begin
FDIBHandle := 0;
FDIB.dsbm.bmBits := nil;
end;
FHandle:=0;
FHandle := 0;
end;
function TBitmapImage.ReleaseMaskHandle: HBITMAP;
@ -87,10 +96,15 @@ begin
FMaskHandle := 0;
end;
function TBitmapImage.ReleasePalette: HPALETTE;
begin
Result := FPalette;
FPalette := 0;
end;
function TBitmapImage.IsEmpty: boolean;
begin
Result := (FHandle = 0) and (FDIBHandle = 0)
and (SaveStream=nil);
Result := (FHandle = 0) and (FDIBHandle = 0) and (SaveStream=nil);
end;
function TBitmapImage.GetPixelFormat: TPixelFormat;