如何保存Bitmap圖片到本地

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-tw/n/242012.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:45
下一篇 2024-12-12 12:45

相關推薦

  • 用Python繪製酷炫圖片

    在本篇文章中,我們將展示如何使用Python繪製酷炫的圖片。 一、安裝Python繪圖庫 在使用Python繪製圖片之前,我們需要先安裝Python繪圖庫。Python有很多繪圖庫…

    編程 2025-04-29
  • 使用axios獲取返回圖片

    使用axios獲取返回圖片是Web開發中很常見的需求。本文將介紹如何使用axios獲取返回圖片,並從多個方面進行詳細闡述。 一、安裝axios 使用axios獲取返回圖片前,首先需…

    編程 2025-04-29
  • Python 圖片轉表格

    本文將詳細介紹如何使用Python將圖片轉為表格。大家平時在處理一些資料的時候難免會遇到圖片轉表格的需求。比如從PDF文檔中提取表格等場景。當然,這個功能也可以通過手動複製、粘貼,…

    編程 2025-04-29
  • Python緩存圖片的處理方式

    本文將從多個方面詳細闡述Python緩存圖片的處理方式,包括緩存原理、緩存框架、緩存策略、緩存更新和緩存清除等方面。 一、緩存原理 緩存是一種提高應用程序性能的技術,在網路應用中流…

    編程 2025-04-29
  • Python如何抓取圖片數據

    Python是一門強大的編程語言,能夠輕鬆地進行各種數據抓取與處理。抓取圖片數據是一個非常常見的需求。在這篇文章中,我們將從多個方面介紹Python如何抓取圖片數據。 一、使用ur…

    編程 2025-04-29
  • Python利用Image加圖片的方法

    在Python中,利用Image庫可以快速處理圖片,並加入需要的圖片,本文將從多個方面詳細闡述這個操作。 一、Image庫的安裝和基礎操作 首先,我們需要在Python中安裝Ima…

    編程 2025-04-28
  • Avue中如何按照後端返回的鏈接顯示圖片

    Avue是一款基於Vue.js、Element-ui等技術棧的可視化開發框架,能夠輕鬆搭建前端頁面。在開發中,我們使用到的圖片通常都是存儲在後端伺服器上的,那麼如何使用Avue來展…

    編程 2025-04-28
  • 使用CKSlide實現圖片輪播

    CKSlide是一個基於jQuery的插件,可以方便地為網頁添加幻燈片和圖片輪播效果。使用CKSlide可以讓網站更加生動、活潑,給用戶帶來更好的體驗。 一、CKSlide基本用法…

    編程 2025-04-28
  • Python中使用socket傳輸圖片

    本文將從多個方面介紹如何使用Python中的socket模塊傳輸圖片,涉及到準備工作、發送方部分和接收方部分的詳細代碼實現。 一、準備工作 在使用Python中的socket模塊進…

    編程 2025-04-28
  • Python窗口中導入圖片

    Python作為一種高級語言,在圖形界面的應用和操作方面越來越得心應手。本篇文章將詳細闡述Python窗口中導入圖片的方法和實現。 一、導入圖片的準備工作 在導入圖片前,我們需要先…

    編程 2025-04-28

發表回復

登錄後才能評論