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的使用方法,也可以為以後的工作鋪平道路。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/242012.html
微信掃一掃
支付寶掃一掃