如何使用Xamarin.Android c#添加另一个较小的图像作为较大图像的水印,并将输出(JPEG / JPG)图像保存到Android设备的内部/外部存储。
答案 0 :(得分:0)
使用Canvas.DrawBitmap
,您可以在另一个可变 Bitmap
之上绘制Bitmap
。 Bitmap.CompressAsync
提供了一个允许保存为流的重载(在本例中为FileStream)。
var filename = System.IO.Path.Combine(Environment.GetExternalStoragePublicDirectory(Environment.DirectoryDownloads).ToString(), "filename.png");
Bitmap newBitmap;
using (var aBitmapToApplyWaterMarkTo = await BitmapFactory.DecodeResourceAsync(Resources, Resource.Drawable.Alexina))
using (var waterMarkBitmap = await BitmapFactory.DecodeResourceAsync(Resources, Resource.Drawable.watermark))
{
newBitmap = aBitmapToApplyWaterMarkTo.Copy(aBitmapToApplyWaterMarkTo.GetConfig(), true);
using (var canvas = new Canvas(newBitmap))
{
canvas.DrawBitmap(waterMarkBitmap, newBitmap.Width - 100, newBitmap.Height - 100, null);
}
}
using (var fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write))
{
await newBitmap.CompressAsync(Bitmap.CompressFormat.Png, 100, fileStream);
}
newBitmap.Dispose();
注意:Using
语句被分成更小的组以允许在我们完成它们时处理资源,以减少此进程的总内存消耗...