[XP/VX/Ace] – Enregistrer des objets Bitmap en fichiers .PNG

Il existe plusieurs scripts capables d’enregistrer le contenu d’instances de la classe Bitmap en fichier .PNG. Ma version a pour caractéristique d’être probablement une des plus rapides, puisqu’elle fait exclusivement appel à du code C compilé dans une DLL, et fait appel aux fonctions de la librairie libpng.
 
 
Utilisation :
 
Il faut copier le fichier MGC_PNG.dll à la racine de votre projet RPG Maker (XP, VX ou VX Ace).
Télécharger le fichier MGC_PNG.dll
 
Puis insérer un nouveau script au-dessus de main, qui contient le code suivant :

#====================================================================
# Enregistrer les Bitmap en PNG
# v.1.0
# Auteur : MGC
#====================================================================
# ** Bitmap
#--------------------------------------------------------------------
# Ajoute une méthode pour créer un fichier image PNG
# à partir d'une instance de la classe Bitmap.
# Nécessite également la dll "MGC_PNG.dll".
#====================================================================
class Bitmap
  #--------------------------------------------------------------------------
  # * Constantes
  #--------------------------------------------------------------------------
  CREATE_PNG = Win32API.new("MGC_PNG", "createPNG", "ll", "l")
  #--------------------------------------------------------------------------
  # * Méthode d'appel pour créer un fichier PNG
  #     chemin : chemin + nom du fichier à créer
  #--------------------------------------------------------------------------
  def save_as_png(chemin)
    unless chemin[/\//] then chemin = './' << chemin end
    CREATE_PNG.call(self.__id__, chemin.__id__)
  end
end

Appeler alors la méthode save_as_png à partir d'une instance de la classe Bitmap, en passant en paramètre le chemin concaténé avec le nom du fichier à enregistrer.
 
ATTENTION : assurez-vous que le chemin existe bien avant d'enregistrer une image ! Au besoin vous pouvez mettre en place des sécurités en ruby en utilisant des commandes Dir.mkir.