Ejemplo n.º 1
0
// MW-2011-09-13: [[ Masks ]] Updated to store data in an MCWindowMask struct.
MCWindowShape *MCImage::makewindowshape(void)
{	
	bool t_success = true;
	
	MCWindowShape *t_mask = nil;
	CGImageRef t_mask_image = nil;
	MCImageBitmap *t_bitmap = nil;
	uint8_t *t_alpha = nil;
	uindex_t t_alpha_stride = 0;
	uindex_t t_width, t_height;
	
	t_success = lockbitmap(t_bitmap, true);
	
	if (t_success)
		t_success = MCImageBitmapHasTransparency(t_bitmap);
	
	if (t_success)
	{
		t_width = t_bitmap->width;
		t_height = t_bitmap->height;
		
		t_alpha_stride = (t_width + 3) & ~3;
		t_success = MCMemoryAllocate(t_alpha_stride * t_height, t_alpha);
	}
	
	if (t_success)
	{
		surface_extract_alpha(t_bitmap->data, t_bitmap->stride, t_alpha, t_alpha_stride, t_width, t_height);
		
		t_success = MCAlphaToCGImage(t_width, t_height, t_alpha, t_alpha_stride, t_mask_image);
	}
	
	if (t_success)
		t_success = MCMemoryNew(t_mask);
	
	unlockbitmap(t_bitmap);
	
	
	if (!t_success)
	{
		CGImageRelease(t_mask_image);
		MCMemoryDeallocate(t_mask);
		MCMemoryDeallocate(t_alpha);
		
		return nil;
	}
	
	t_mask->width = t_width;
	t_mask->height = t_height;
	t_mask->is_sharp = false;
	
	t_mask->data = (char*)t_alpha;
	t_mask->stride = t_alpha_stride;
	
	t_mask->handle = t_mask_image;
	
	return t_mask;
}
Ejemplo n.º 2
0
CGImageRef MCImage::converttodragimage(void)
{
	CGImageRef t_image = NULL;
	MCImageBitmap *t_bitmap = nil;
	
	if (lockbitmap(t_bitmap, false))
		/* UNCHECKED */ MCImageBitmapToCGImage(t_bitmap, true, false, t_image);
	unlockbitmap(t_bitmap);
	
	return t_image;

}
Ejemplo n.º 3
0
CGImageRef MCImage::makeicon(uint4 p_width, uint4 p_height)
{
	CGImageRef t_icon = NULL;

	MCImageBitmap *t_bitmap = nil;
	
	if (lockbitmap(t_bitmap, false))
	{
		MCImageBitmap *t_scaled = nil;
		if (p_width != t_bitmap->width || p_height != t_bitmap->height)
			/* UNCHECKED */ MCImageScaleBitmap(t_bitmap, p_width, p_height, resizequality, t_scaled);
		/* UNCHECKED */ MCImageBitmapToCGImage(t_scaled != nil ? t_scaled : t_bitmap, true, false, t_icon);
		MCImageFreeBitmap(t_scaled);
		unlockbitmap(t_bitmap);
	}
	
	return t_icon;
}