我有一个Azure功能,想要裁剪一个字节数组内的图像,然后将其保存到blob中。我不知道如何进行裁剪部分,因为Azure函数中没有位图。这是我对blob的保存:
private async static Task<string> CreateBlob(string name, byte[] data, TraceWriter log)
它可以正常工作。另外,如果有帮助的话,我有要裁剪的图像的网址。只是不知道如何使用Azure功能实现此目的。有什么想法吗?
修改
这是原始图像,我在一个字节数组中。我想用它来裁剪另一个大小 - 650x290
int cropStartX = 0;
int cropStartY = 0;
int cropWidth = 650;
int cropHeight = 290;
int multiply = cropWidth * cropHeight;
byte[] croppedImage = new byte[multiply];
for (int j = cropStartX; j < cropStartX + cropWidth; j++)
{
for (int k = cropStartY; k < cropStartY + cropHeight; k++)
{
if ((j + k * cropWidth) >= ((byte[])OriginalPic).Length)
break;
croppedImage[j + k * cropWidth] = ((byte[])OriginalPic)[j + k * cropWidth];
}
}
这是OriginalPic的大小 - 字节[49121]
如果我设置了这是输出:
croppedImage[j + k * cropWidth] = ((byte[])OriginalPic)[j + k * (cropWidth + 20)];
答案 0 :(得分:0)
idk如果这是你所追求的,但假设你知道图片的尺寸,你只需将其编码到你的索引中:
伪代码
int cropWidth = 100;
int cropHeight = 50;
byte[cropWidth*cropHeight] croppedImage;
for(int i=cropStartX;i<cropStartX+cropWidth;i++)
{
for(int ii = cropStartY;ii<cropStartY+cropHeight;ii++)
{
croppedImage[i + ii*cropWidth] = image[i + ii*mainImageWidth];
}
}
我知道这并不像你实际上只能做一个记忆复制功能一样快......但会做你需要的。
更新:在查看了更多信息之后,我担心这种方法对您没有影响,因为您已经压缩了图像数据。基本上jpeg以大约1:10的大小压缩数据,这更加明显,因为你的图像字节数组只有49k,因为它几乎就是文件大小,其中包含了rgb的1024x434图片的jpeg压缩信息。长话短说,你不能简单地从该数组中查询像素位置以获得有意义的数据,除非你在裁剪之前解压缩图像。我注意到,当我注意到一个“字节”代表一个rgb像素(不匹配)时,我应该看到这个道歉。