位圖操作

2024-02-16 13:59 更新

當需要對目標圖片中的部分區(qū)域進行處理時,可以使用位圖操作功能。此功能常用于圖片美化等操作。

如下圖所示,一張圖片中,將指定的矩形區(qū)域像素數(shù)據(jù)讀取出來,進行修改后,再寫回原圖片對應(yīng)區(qū)域。

圖1 位圖操作示意圖

開發(fā)步驟

位圖操作相關(guān)API的詳細介紹請參見API參考。

  1. 完成圖片解碼,獲取PixelMap位圖對象。
  2. 從PixelMap位圖對象中獲取信息。

    1. // 獲取圖像像素的總字節(jié)數(shù)
    2. let pixelBytesNumber = pixelMap.getPixelBytesNumber();
    3. // 獲取圖像像素每行字節(jié)數(shù)
    4. let rowCount = pixelMap.getBytesNumberPerRow();
    5. // 獲取當前圖像像素密度。像素密度是指每英寸圖片所擁有的像素數(shù)量。像素密度越大,圖片越精細。
    6. let getDensity = pixelMap.getDensity();
  3. 讀取并修改目標區(qū)域像素數(shù)據(jù),寫回原圖。
    1. // 場景一:將讀取的整張圖像像素數(shù)據(jù)結(jié)果寫入ArrayBuffer
    2. const readBuffer = new ArrayBuffer(pixelBytesNumber);
    3. pixelMap.readPixelsToBuffer(readBuffer).then(() => {
    4. console.info('Succeeded in reading image pixel data.');
    5. }).catch(error => {
    6. console.error('Failed to read image pixel data. And the error is: ' + error);
    7. })
    8. // 場景二:讀取指定區(qū)域內(nèi)的圖片數(shù)據(jù),結(jié)果寫入area.pixels中
    9. const area = {
    10. pixels: new ArrayBuffer(8),
    11. offset: 0,
    12. stride: 8,
    13. region: { size: { height: 1, width: 2 }, x: 0, y: 0 }
    14. }
    15. pixelMap.readPixels(area).then(() => {
    16. console.info('Succeeded in reading the image data in the area.');
    17. }).catch(error => {
    18. console.error('Failed to read the image data in the area. And the error is: ' + error);
    19. })
    20. // 對于讀取的圖片數(shù)據(jù),可以獨立使用(創(chuàng)建新的pixelMap),也可以對area.pixels進行所需修改
    21. // 將圖片數(shù)據(jù)area.pixels寫入指定區(qū)域內(nèi)
    22. pixelMap.writePixels(area).then(() => {
    23. console.info('Succeeded to write pixelMap into the specified area.');
    24. })
    25. // 將圖片數(shù)據(jù)結(jié)果寫入pixelMap中
    26. const writeColor = new ArrayBuffer(96);
    27. pixelMap.writeBufferToPixels(writeColor, () => {});
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號