C# Xamarin Android如何从位图创建BMP

C# Xamarin Android如何从位图创建BMP,c#,android,xamarin,bitmap,bmp,C#,Android,Xamarin,Bitmap,Bmp,我想知道如何使用位图文件(png Opened)创建BMP 我试过了 但这对我不起作用 为C#更新: public类AndroidBmpUtil { 私有只读整型BMP\u宽度\u乘以=4; 私有只读整数字节每像素=3; /** *Android位图对象到窗口的v3 24位Bmp格式文件 *@param orgBitmap *@param文件路径 *@return文件保存结果 */ 公共布尔保存(位图或位图、字符串文件路径) { 如果(orgBitmap==null) { 返回false; }

我想知道如何使用位图文件(png Opened)创建BMP

我试过了 但这对我不起作用

为C#更新:

public类AndroidBmpUtil
{
私有只读整型BMP\u宽度\u乘以=4;
私有只读整数字节每像素=3;
/**
*Android位图对象到窗口的v3 24位Bmp格式文件
*@param orgBitmap
*@param文件路径
*@return文件保存结果
*/
公共布尔保存(位图或位图、字符串文件路径)
{
如果(orgBitmap==null)
{
返回false;
}
if(filePath==null)
{
返回false;
}
var isSaveSuccess=true;
//图像大小
var-width=orgBitmap.width;
var height=orgBitmap.height;
//图像虚拟数据大小
//原因:bmp文件的宽度等于4的倍数
var dummySize=0;
字节[]dummyBytesPerRow=null;
var hasDummy=false;
if(isbmpWidth4次(宽度))
{
hassdummy=true;
dummySize=BMP\u WIDTH\u OF_TIMES-宽度%BMP\u WIDTH\u OF_TIMES;
dummyBytesPerRow=新字节[dummySize*每像素字节];
对于(变量i=0;i0)
{
起始位置=(第1行)*列;
endPosition=行*列;
对于(变量i=起始位置;i<结束位置;i++)
{
Put(为像素[i])写入24位;
if(hassdummy)
{
if(isBitmapWidthLastPixcel(宽度,i))
{
buffer.Put(dummyBytesPerRow);
}
}
}
行--;
}
var fos=新文件输出流(文件路径);
fos.Write(新字节[buffer.Remaining()]);
fos.Close();
}
捕获(异常e1)
{
isSaveSuccess=错误;
}
最后
{
}
回报就是成功;
}
/**
*是Android位图宽度中的最后一个像素
*@参数宽度
*@param i
*@返回
*/
私有bool isBitmapWidthLastPixcel(整数宽度,整数i)
{
返回i>0&&i%(宽度-1)==0;
}
/**
*BMP文件是4的倍数?
*@参数宽度
*@返回
*/
私有布尔值为bmpWidth4次(整数宽度)
{
返回宽度%BMP\u宽度\u的\u次>0;
}
/**
*将整数写入小尾数
*@param值
*@返回
*@抛出异常
*/
专用字节[]写入内容(int值)
{
var b=新字节[4];
b[0]=(字节)(值&0x000000FF);
b[1]=(字节)((值&0x0000FF00)>>8);
b[2]=(字节)((值&0x00FF0000)>>16);
b[3]=(字节)((值&0xFF000000)>>24);
返回b;
}
/**
*将整数像素写入小端字节数组
*@param值
*@返回
*@抛出异常
*/
专用字节[]为PIXcel写入24位(int值)
{
变量
b=新字节[3];
b[0]=(字节)(值&0x000000FF);
b[1]=(字节)((值&0x0000FF00)>>8);
b[2]=(字节)((值&0x00FF0000)>>16);
返回b;
}
/**
*短写到小端字节数组
*@param值
*@返回
*@抛出异常
*/
专用字节[]写端口(短值)
{
变量
b=新字节[2];
b[0]=(字节)(值&0x00FF);
b[1]=(字节)((值&0xFF00)>>8);
返回b;
}
}
创建我的BMP花了很长时间(40秒),当它被创建时,它有0个八位组大小

所以我需要帮助^^'

谢谢

图像为空修复:

var fos = new FileOutputStream(filePath); 
//fos.Write(new byte[buffer.Remaining()]); 
byte[] bmpData=new byte[buffer.Position()]; 
buffer.Position(0); //or buffer.Flip();
buffer.Get(bmpData, 0, buffer.Remaining()); 

fos.Write(bmpData); 
fos.Close();

为什么它对你“不起作用”?@YuriS-Oops!编辑^^只是为了澄清。将PNG文件转换为BM时遇到的问题
var fos = new FileOutputStream(filePath); 
//fos.Write(new byte[buffer.Remaining()]); 
byte[] bmpData=new byte[buffer.Position()]; 
buffer.Position(0); //or buffer.Flip();
buffer.Get(bmpData, 0, buffer.Remaining()); 

fos.Write(bmpData); 
fos.Close();