class EL_GDI_BITMAP_ROUTINES
GDI+ bitmap routines accessible via EL_MODULE_GDI_BITMAP
note
description: "GDI+ bitmap routines accessible via ${EL_MODULE_GDI_BITMAP}"
author: "Finnian Reilly"
copyright: "Copyright (c) 2001-2022 Finnian Reilly"
contact: "finnian at eiffel hyphen loop dot com"
license: "MIT license (See: en.wikipedia.org/wiki/MIT_License)"
date: "2024-02-14 10:09:20 GMT (Wednesday 14th February 2024)"
revision: "7"
class
EL_GDI_BITMAP_ROUTINES
inherit
WEL_GDIP_IMAGE_LOCK_MODE
rename
is_valid as is_valid_lock_mode
export
{NONE} all
{ANY} is_valid_lock_mode
end
WEL_GDIP_PIXEL_FORMAT
export
{NONE} all
end
EV_ANY_HANDLER
feature -- Factory
new (a_pixmap: EV_PIXMAP): WEL_GDIP_BITMAP
do
if attached {EV_PIXMAP_IMP_STATE} a_pixmap.implementation as imp_pixmap then
create Result.make_from_bitmap (imp_pixmap.get_bitmap, imp_pixmap.palette)
else
create Result.make_formatted (a_pixmap.width, a_pixmap.width, Format32bppPArgb)
end
end
new_clone (bitmap: WEL_GDIP_BITMAP; format: INTEGER): WEL_GDIP_BITMAP
local
rect: WEL_GDIP_RECT
do
create rect.make_with_size (0, 0, bitmap.width, bitmap.height)
Result := bitmap.clone_rectangle_pixel_format (rect, format)
end
new_data (bitmap: WEL_GDIP_BITMAP; lock_bitmode_flag: NATURAL_32): WEL_GDIP_BITMAP_DATA
-- premultiplied image data in ARGB format
require
valid_lock_mode: is_valid_lock_mode (lock_bitmode_flag)
local
rect: WEL_GDIP_RECT
do
create rect.make_with_size (0, 0, bitmap.width, bitmap.height)
Result := bitmap.lock_bits (rect, lock_bitmode_flag, Format32bppPArgb)
end
new_scaled (dimension: NATURAL_8; bitmap: WEL_GDIP_BITMAP; size: INTEGER): WEL_GDIP_BITMAP
local
graphics: WEL_GDIP_GRAPHICS; dest_rect, source_rect: WEL_RECT
proportion: DOUBLE
do
inspect dimension
when {EL_DIRECTION}.By_width then
proportion := size / bitmap.width
else
proportion := size / bitmap.height
end
create dest_rect.make (0, 0, (bitmap.width * proportion).rounded, (bitmap.height * proportion).rounded)
create source_rect.make (0, 0, bitmap.width, bitmap.height)
create Result.make_with_size (dest_rect.width, dest_rect.height)
create graphics.make_from_image (Result)
graphics.draw_image_with_dest_rect_src_rect (bitmap, dest_rect, source_rect)
dest_rect.dispose; source_rect.dispose
graphics.destroy_item
end
end