Bitmap是一种常见的位图格式,通常在Android或C#等编程语言中使用。我们有时需要将Bitmap保存到本地以备以后使用,或者将图片上传到互联网等。本文将从多个方面探讨如何将Bitmap图片保存到本地。
一、使用C语言保存Bitmap图片
C语言提供了一些库函数来操作位图(BMP)文件。我们可以使用这些函数来保存Bitmap图片。以下是一个简单的示例代码:
/* 保存Bitmap到本地文件 */ int SaveBitmapToFile(const char* filename, HBITMAP hBitmap) { HDC hdc; int height, width, bpp, pitch, sizeImage, numColors, colorTableSize, fileSize; BITMAPFILEHEADER fileHeader; BITMAPINFOHEADER infoHeader; RGBQUAD *colorTable; BYTE *bits; FILE *fp; //获取Bitmap信息 hdc = CreateDC("DISPLAY", NULL, NULL, NULL); GetObject(hBitmap, sizeof(BITMAP), &bmp); width = bmp.bmWidth; height = bmp.bmHeight; bpp = bmp.bmBitsPixel; pitch = ((width * bpp + 31) & ~31) >> 3; sizeImage = pitch * height; numColors = (bpp <= 8) ? (1 << bpp) : 0; colorTableSize = numColors * sizeof(RGBQUAD); fileSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + colorTableSize + sizeImage; //保存Bitmap fp = fopen(filename, "wb"); if (!fp) { return -1; } bits = (BYTE*)malloc(sizeImage); colorTable = (RGBQUAD*)malloc(colorTableSize); ZeroMemory(&fileHeader, sizeof(fileHeader)); ZeroMemory(&infoHeader, sizeof(infoHeader)); fileHeader.bfType = 0x4D42; fileHeader.bfSize = fileSize; fileHeader.bfOffBits = sizeof(fileHeader) + sizeof(infoHeader) + colorTableSize; infoHeader.biSize = sizeof(infoHeader); infoHeader.biWidth = width; infoHeader.biHeight = height; infoHeader.biPlanes = 1; infoHeader.biBitCount = bpp; if (numColors) { infoHeader.biClrUsed = numColors; } fwrite(&fileHeader, sizeof(fileHeader), 1, fp); fwrite(&infoHeader, sizeof(infoHeader), 1, fp); if (numColors) { GetDIBColorTable(hdc, 0, numColors, colorTable); fwrite(colorTable, colorTableSize, 1, fp); } GetBitmapBits(hBitmap, sizeImage, bits); fwrite(bits, sizeImage, 1, fp); free(bits); free(colorTable); fclose(fp); DeleteDC(hdc); return 0; }
我们可以传入Bitmap图片文件名和Bitmap句柄,将Bitmap保存为文件。该函数使用了C语言中的标准文件操作以及Windows API函数,所以需要在Windows系统中运行才能正常工作。
二、使用bitmap保存图片
在C#中,我们可以使用bitmap自带的Save方法将Bitmap保存到本地。以下是示例代码:
using System.Drawing; using System.Drawing.Imaging; //保存Bitmap图片到本地 public void SaveBitmapToFile(Bitmap bmp, string filename) { bmp.Save(filename, ImageFormat.Jpeg); }
我们可以传入Bitmap和文件名,接着将Bitmap保存为Jpeg格式。同样地,我们也可以使用其他格式,如Png、Bmp等。
三、使用安卓系统保存Bitmap图片
在Android开发中,我们可以调用系统提供的API将Bitmap图片保存到本地。以下是一个简单的示例代码:
//将Bitmap图片保存到本地 public boolean SaveBitmapToFile(Bitmap bmp, String filename) { FileOutputStream out = null; try { out = new FileOutputStream(filename); bmp.compress(Bitmap.CompressFormat.PNG, 90, out); return true; } catch (Exception e) { e.printStackTrace(); return false; } finally { try { if (out != null) { out.close(); } } catch (IOException e) { e.printStackTrace(); } } }
我们可以传入Bitmap和文件名,接着将Bitmap保存为PNG格式。在Android开发中应该尽量避免保存在SD卡根目录,以免因权限问题被系统拒绝。
四、Bitmap保存为文件
最后,我们来探讨如何将Bitmap保存为文件。以下是示例代码:
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.image); File file = new File("/sdcard/image.jpg"); try { file.createNewFile(); FileOutputStream fos = new FileOutputStream(file); bmp.compress(Bitmap.CompressFormat.JPEG, 90, fos); fos.flush(); fos.close(); } catch (IOException e) { e.printStackTrace(); }
我们可以传入Bitmap和文件名,接着将Bitmap保存为Jpeg格式。同样地,我们也可以使用其他格式,如Png、Bmp等。
五、总结
本文从多个方面探讨了如何将Bitmap图片保存到本地。对于初学者而言,了解这些方法可以更好地掌握Bitmap的使用方法,也可以为以后的工作铺平道路。