Bug qui vient de la gestion de la couche alpha faite par PB
en effet, les zone de l'image totalement transparente doivent s'écrire avec la couleur $00FFFFFF et pas $00000000
Et c'est cette erreur qui cause un résultat, n’ayons pas peur des mots, merdique avec ResizeImage
voici un palliatif en espérant un prise en compte avant la version 157.12

je vous laisse observer la différence, je pense que ça se passe de commentaire, il y a une belle bordure noire qui apparait avec le resize de PB

Code : Tout sélectionner
Procedure ResizeAlphaImage(Image, Width, Height, Quality = #PB_Image_Smooth)
Protected x, x1, x2, Memoire, Image_HDC, Image_Ancienne, Image_Bitmap.BITMAP, Image_BitmapInfo.BITMAPINFO
If IsImage(Image)
; Chargement du HDC
Image_HDC = CreateCompatibleDC_(#Null)
Image_Ancienne = SelectObject_(Image_HDC, ImageID(Image))
; Dimension de l'image
GetObject_(ImageID(Image), SizeOf(BITMAP), @Image_Bitmap)
Image_BitmapInfo\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
Image_BitmapInfo\bmiHeader\biWidth = Image_Bitmap\bmWidth
Image_BitmapInfo\bmiHeader\biHeight = Image_Bitmap\bmHeight
Image_BitmapInfo\bmiHeader\biPlanes = 1
Image_BitmapInfo\bmiHeader\biBitCount = 32
; Zone mémoire pour copier l'image
xx = Image_Bitmap\bmWidth * Image_Bitmap\bmHeight - 1
Protected Dim Memoire(xx)
; Copie de l'image en mémoire
GetDIBits_(Image_HDC, ImageID(Image), 0, Image_Bitmap\bmHeight, @Memoire(), @Image_BitmapInfo, #DIB_RGB_COLORS)
; Modification de l'image en mémoire
For x = 0 To xx
If Memoire(x) = 0
Memoire(x) = $00FFFFFF
EndIf
Next
; Transfert de la mémoire dans la l'image de base
SetDIBits_(Image_HDC, ImageID(Image), 0, Image_Bitmap\bmHeight, @Memoire(), @Image_BitmapInfo, #DIB_RGB_COLORS)
; Fermeture du HDC
SelectObject_(Image_HDC, Image_Ancienne)
DeleteDC_(Image_HDC)
ResizeImage(Image, Width, Height, Quality)
EndIf
EndProcedure
; Création d'une image avec couche Alpha
CreateImage(0, 64, 64, 32 | #PB_Image_Transparent)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
Box(4, 4, 24, 24, $FFFF00FF)
LineXY(32, 4, 63, 24, $FF80FF80)
LineXY(32, 24, 63, 4, $FF8080FF)
RoundBox(4, 36, 24, 24, 4, 8, $FF00A0FF)
Circle(48, 48, 12, $FFFF00FF)
StopDrawing()
CopyImage(0, 1)
CopyImage(0, 2)
ResizeImage(1, 128, 128, #PB_Image_Smooth)
ResizeAlphaImage(2, 128, 128, #PB_Image_Smooth)
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 600, 600, "ResizeImage", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
End
EndIf
TextGadget(#PB_Any, 4, 4, 300, 16, "Image original")
ImageGadget(#PB_Any, 4, 20, 64, 64, ImageID(0))
TextGadget(#PB_Any, 4, 144, 300, 16, "Image agrandie : ResizeImage (PB)")
ImageGadget(#PB_Any, 4, 160, 128, 128, ImageID(1))
TextGadget(#PB_Any, 4, 288, 300, 16, "Image agrandie : ResizeAlphaImage")
ImageGadget(#PB_Any, 4, 304, 128, 128, ImageID(2))
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget() ; Gadgets
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
http://www.purebasic.fr/english/viewtop ... 14#p353314