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 protected
procedure FreeHandle; override; procedure FreeHandle; override;
procedure FreeMaskHandle; procedure FreeMaskHandle;
procedure FreePalette;
function ReleaseHandle: HBITMAP; function ReleaseHandle: HBITMAP;
function ReleaseMaskHandle: HBITMAP; function ReleaseMaskHandle: HBITMAP;
function ReleasePalette: HPALETTE;
function IsEmpty: boolean; function IsEmpty: boolean;
function GetPixelFormat: TPixelFormat; function GetPixelFormat: TPixelFormat;
public public

View File

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

View File

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