我需要在C#中复制这段代码,但我还没有找到一个好的方法。
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
Bitmap d;
this.d.compress(Bitmap.CompressFormat.JPEG, 70, localByteArrayOutputStream);
Byte[] image = localByteArrayOutputStream.toByteArray();
我将自己的图像发送到服务器,它需要与此Java代码所使用的格式相同。 如何才能在C#中实现这一目标?是否存在android.graphics.bitmap.CompressFormat或服务器可以接受的等效内容?
答案 0 :(得分:3)
借助System.Drawing
和System.Drawing.Imaging
命名空间中的几个类,可以很容易地在.Net Framework中实现这一点。你甚至不需要处理低级别的东西,比如字节数组......这是一个采用输入文件路径并将结果输出到不同文件的例子......
string inputFile = @"in.jpg";
string outputFile = @"out.jpg";
Bitmap inputPhoto = new Bitmap(inputFile);
ImageCodecInfo decoder = null;
ImageCodecInfo[] decoders = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo c in decoders)
{
if (c.FormatID == ImageFormat.Jpeg.Guid)
{
decoder = c;
break;
}
}
System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.Quality;
EncoderParameters encoderParams = new EncoderParameters(1);
EncoderParameter qualityParam = new EncoderParameter(encoder, 70L);
encoderParams.Param[0] = qualityParam;
inputPhoto.Save(outputFile, decoder, encoderParams);
这完全符合您的要求,但是,如果您无权访问文件系统,则可以始终将字节数组放入MemoryStream
对象中,并使用Bitmap
的不同重载接受Stream
对象