@@ -4375,26 +4375,46 @@ procedure TUIImage.LoadPng(const Filename: String; const HighContrast: Boolean);
43754375
43764376constructor TUIImage.Create(pImageList: TCustomImageList; pImageIndex: TImageIndex);
43774377var
4378+ lWICImage: TWICImage;
4379+ lIcon: TIcon;
4380+ lStream: TStream;
43784381 lBitmap: TBitmap;
4382+ lWICStream: TMemoryStream;
43794383begin
43804384 inherited Create;
4381- if Assigned(FImageFactory) and Assigned(pImageList) then
4385+ if Assigned(FImageFactory) and Assigned(pImageList) and (pImageList.Count > 0 ) and (pImageIndex >= 0 ) then
43824386 begin
4387+ lIcon := TIcon.Create;
4388+ lStream := TMemoryStream.Create;
4389+ lWICImage := TWICImage.Create;
4390+ lWICStream := TMemoryStream.Create;
43834391 lBitmap := TBitmap.Create;
43844392 try
4385- lBitmap.Width := pImageList.Width;
4386- lBitmap.Height := pImageList.Height;
4387- lBitmap.PixelFormat := pf32bit;
4388- lBitmap.Transparent := True;
4389- // Draw empty background (for transparency)
4390- lBitmap.Canvas.Brush.Color := clNone;
4391- lBitmap.Canvas.FillRect(lBitmap.Canvas.ClipRect);
4392- if not ImageList_DrawEx(pImageList.Handle, pImageIndex, lBitmap.Canvas.Handle, (lBitmap.Width - pImageList.Width) div 2 , (lBitmap.Height - pImageList.Height) div 2 , 0 , 0 , CLR_NONE, CLR_NONE, ILD_TRANSPARENT) then
4393- exit;
4393+ // Load icon from image list to TIcon and save to a TMemoryStream
4394+ pImageList.GetIcon(pImageindex, lIcon);
4395+ try
4396+ lIcon.SaveToStream(lStream);
4397+ except on E: EInvalidGraphic do
4398+ Exit;
4399+ end ;
4400+
4401+ // Load stream into a TWICImage, convert to BMP, save to TMemoryStream
4402+ lWICImage.LoadFromStream(lStream);
4403+ lWICImage.ImageFormat := TWICImageFormat.wifBmp;
4404+ lWICImage.SaveToStream(lWICStream);
4405+ lWICSTream.Seek(0 , TSeekOrigin.soBeginning);
4406+
4407+ // Load bitmap from WIC stream
4408+ lBitmap.LoadFromStream(lWICStream);
4409+ ConvertToAlphaBitmap(lBitmap);
43944410 FHandle := FImageFactory.CreateImage(lBitmap.Handle, UIOwnershipCopy);
43954411 FBitmap := FHandle.GetBitmap;
43964412 finally
43974413 lBitmap.Free;
4414+ lWICStream.Free;
4415+ lWICImage.Free;
4416+ lStream.Free;
4417+ lIcon.Free;
43984418 end ;
43994419 end ;
44004420end ;
0 commit comments