8,734
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Media.Imaging;
using System.IO;
using System.Text;
using FluxJpeg.Core;
using FluxJpeg.Core.Encoder;
namespace SilverlightApplication2
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
/// <summary>
/// 图层导出
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Click(object sender, RoutedEventArgs e)
{
Transform form = this.RenderTransform;
WriteableBitmap wb = new WriteableBitmap(this, form);
Stream writeStream; // 写入流
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "jpg | *.jpg";
saveFileDialog.DefaultExt = "jpg";
if (saveFileDialog.ShowDialog().Value == true)
{
writeStream = saveFileDialog.OpenFile();
byte[] byteArray = Convert.FromBase64String(GetBase64Image(wb));
writeStream.Write(byteArray, 0, (int)byteArray.Length);
writeStream.Close();
MessageBox.Show("保存成功");
}
}
// 将WriteableBitmap转化为base64位字符串
private string GetBase64Image(WriteableBitmap bitmap)
{
int width = bitmap.PixelWidth;
int height = bitmap.PixelHeight;
int bands = 3;
byte[][,] raster = new byte[bands][,];
for (int i = 0; i < bands; i++)
{
raster[i] = new byte[width, height];
}
for (int row = 0; row < height; row++)
{
for (int column = 0; column < width; column++)
{
int pixel = bitmap.Pixels[width * row + column];
// 透明色会成为黑色,把像素为0的改为白色
if (pixel != 0)
{
raster[0][column, row] = (byte)(pixel >> 16);
raster[1][column, row] = (byte)(pixel >> 8);
raster[2][column, row] = (byte)pixel;
}
else
{
raster[0][column, row] = 0xff;
raster[1][column, row] = 0xff;
raster[2][column, row] = 0xff;
}
}
}
ColorModel model = new ColorModel { colorspace = ColorSpace.RGB };
FluxJpeg.Core.Image img = new FluxJpeg.Core.Image(model, raster);
MemoryStream stream = new MemoryStream();
// quality与清晰度有关,与透明色无关
JpegEncoder encoder = new JpegEncoder(img, 100, stream);
encoder.Encode();
stream.Seek(0, SeekOrigin.Begin);
byte[] binaryData = new Byte[stream.Length];
long bytesRead = stream.Read(binaryData, 0, (int)stream.Length);
string base64String = System.Convert.ToBase64String(binaryData,
0,
binaryData.Length);
return base64String;
}
}
}