Android:将位图对象另存为bmp(1bpp)文件格式

里卡多·索萨(Ricardo Sousa)

基于@ ben75提出的以下问题:Android:将位图保存为bmp文件格式

我现在的问题是:如何获得每像素深度为1位(黑白)的BMP图像?

里卡多·索萨(Ricardo Sousa)

回答我自己的问题...

在网络上进行了艰苦的搜索之后,我意识到我必须创建两件事:黑色和白色的位图-并使用将所有0设置为低于128的颜色并将其余255设置为255的方法来做到这一点,就像这样(这是C#代码,因为我正在使用Xamarin编写我的应用程序):

private void ConvertArgbToOneColor (Bitmap bmpOriginal, int width, int height){
        int pixel;
        int k = 0;
        int B=0,G=0,R=0;
        try{
            for(int x = 0; x < height; x++) {
                for(int y = 0; y < width; y++, k++) {
                    pixel = bmpOriginal.GetPixel(y, x);

                    R = Color.GetRedComponent(pixel);
                    G = Color.GetGreenComponent(pixel);
                    B = Color.GetBlueComponent(pixel);

                    R = G = B = (int)(0.299 * R + 0.587 * G + 0.114 * B);
                    if (R < 128) {
                        m_imageArray[k] = 0;
                    } else {
                        m_imageArray[k] = 1;
                    }
                }
                if(m_dataWidth>width){
                    for(int p=width;p<m_dataWidth;p++,k++){
                        m_imageArray[k]=1;
                    }
                }
            }
        }catch (Exception e) {
            System.Console.WriteLine ("Converting to grayscale ex: " + e.Message);
        }
    }

然后获取单色图像的byteArray:

int length = 0;
for (int i = 0; i < m_imageArray.Length; i = i + 8) {
    byte first = m_imageArray[i];
    for (int j = 0; j < 7; j++) {
        byte second = (byte) ((first << 1) | m_imageArray[i + j]);
        first = second;
    }
    m_rawImage[length] = first;
    length++;
}

最后,使用以下变量“手动”创建位图,并将其放入FileOutputStream中以保存文件:

    private static int FILE_HEADER_SIZE = 14;
    private static int INFO_HEADER_SIZE = 40;

    // Bitmap file header
    private byte[] bfType = { (byte) 'B', (byte) 'M' };
    private int bfSize = 0;
    private int bfReserved1 = 0;
    private int bfReserved2 = 0;
    private int bfOffBits = FILE_HEADER_SIZE + INFO_HEADER_SIZE + 8;

    // Bitmap info header
    private int biSize = INFO_HEADER_SIZE;
    private int biWidth = 0;
    private int biHeight = 0;
    private int biPlanes = 1;
    private int biBitCount = 1;
    private int biCompression = 0;
    private int biSizeImage = 0;
    private int biXPelsPerMeter = 0x0;
    private int biYPelsPerMeter = 0x0;
    private int biClrUsed = 2;
    private int biClrImportant = 2;

    // Bitmap raw data
    private byte[] bitmap;

    // Scanlinsize;
    int scanLineSize = 0;

    // Color Pallette to be used for pixels.
    private byte[] colorPalette = { 0, 0, 0, (byte) 255, (byte) 255,
        (byte) 255, (byte) 255, (byte) 255 };

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将位图文件另存为jpg

来自分类Dev

VB .NET 2010:将大位图另存为文件

来自分类Dev

另存为CSV格式将文件另存为#NAME吗?

来自分类Dev

将布局另存为位图

来自分类Dev

将位图另存为jpeg图像

来自分类Dev

将位图另存为jpeg图像

来自分类Dev

在Android中将1bpp位图转换为图像

来自分类Dev

android,将视图图像另存为png文件

来自分类Dev

如何将DIV元素另存为jpg或bmp文件?

来自分类Dev

将准备好的布局转换为位图并将其另存为文件中的图像

来自分类Dev

如何将图像另存为32位BMP?

来自分类Dev

将.maf文件另存为表

来自分类Dev

将pdf文件另存为blob

来自分类Dev

Rails将文件另存为图像

来自分类Dev

如何将位图图像另存为JPEG

来自分类Dev

将excel另存为pdf,将文件名另存为变量值

来自分类Dev

将.cgi流图像格式另存为Video

来自分类Dev

将JavaScript值另存为纯文本格式

来自分类Dev

如何在Photoshop中打开RAW 1bpp位图文件?

来自分类Dev

将Blob对象另存为服务器上的文件

来自分类Dev

如何将奇异果画布对象另存为图像文件

来自分类Dev

使用Python将csv文件中的剥离文本另存为字符串对象

来自分类Dev

php如何将fpdi对象另存为pdf文件

来自分类Dev

将模型中的对象列表另存为字段

来自分类Dev

将完成处理程序另存为对象

来自分类Dev

将MATLAB曲面对象另存为图像

来自分类Dev

将C#对象另存为Oracle中的Blob

来自分类Dev

无法将日期对象另存为字符串

来自分类Dev

将Google API请求另存为Javascript对象