在调整大图像(> 6MB,14034px×9921px)的大小时,该过程没有错误,但是图像本身在保存时不会显示,只会显示白色背景画布。
该代码适用于较小的图像。
可以处理多大文件大小有限制吗?
class TestA(unittest.TestCase):
def setUp(self):
self.mock_request = Mock()
@patch('http.server.HTTPServer')
@patch('my_module.A.do_GET')
def test_do_get(self, mock_do_get, mock_http_server):
"""Test if do_GET method gets called"""
mock_do_get.return_value = "/"
self.mock_request.makefile.return_value = IO(b"GET /")
server = A(self.mock_request, ('127.0.0.1', 8080), mock_http_server)
self.assertTrue(mock_do_get.called)
self.assertEqual(server.do_GET(), "/")
答案 0 :(得分:0)
我看了一下,发现它与内存缓冲区的最大大小有关。绘制时,skia只能理解最大为size_t
的内存。
当以x86运行时,这是4,294,967,295字节。在我的x64机器上,这要大得多。
我试图用46,080x31,320调整RGBA图像的大小,但在以x86运行时失败。这是因为Skia计算得出的值为5,772,902,400字节-溢出。当以x64运行时,调整大小操作成功。
我在Skia论坛上进行了讨论,以查看开发人员的建议:https://getbootstrap.com/docs/4.0/components/modal/
答案 1 :(得分:0)
我裁剪图像并显示两个位图
SKRect display = CalculateDisplayRect(dest, scale * bitmap.Width, scale * bitmap.Height,
horizontal, vertical);
SKRect newDest = new SKRect(display.Left, display.Top, display.Right, display.Bottom/2);
SKRect newSource = new SKRect(display.Left, display.Top, display.Right, display.Bottom / 2);
//canvas.DrawBitmap(bitmap, display, paint);
canvas.DrawBitmap(bitmap, newSource, newDest, paint);
SKRect newDest2 = new SKRect(display.Left, display.Top+ display.Bottom / 2, display.Right, display.Bottom );
SKRect newSource2 = new SKRect(display.Left, display.Top+ display.Bottom / 2, display.Right, display.Bottom );
//canvas.DrawBitmap(bitmap, display, paint);
canvas.DrawBitmap(bitmap, newSource2, newDest2, paint);
static SKRect CalculateDisplayRect(SKRect dest, float bmpWidth, float bmpHeight,
BitmapAlignment horizontal, BitmapAlignment vertical)
{
float x = 0;
float y = 0;
switch (horizontal)
{
case BitmapAlignment.Center:
x = (dest.Width - bmpWidth) / 2;
break;
case BitmapAlignment.Start:
break;
case BitmapAlignment.End:
x = dest.Width - bmpWidth;
break;
}
switch (vertical)
{
case BitmapAlignment.Center:
y = (dest.Height - bmpHeight) / 2;
break;
case BitmapAlignment.Start:
break;
case BitmapAlignment.End:
y = dest.Height - bmpHeight;
break;
}
x += dest.Left;
y += dest.Top;
return new SKRect(x, y, x + bmpWidth, y + bmpHeight);
}