1. 程式人生 > >獲取UIImage畫素資料

獲取UIImage畫素資料

typedef CF_ENUM(uint32_t, CGImageAlphaInfo) {
  kCGImageAlphaNone,               /* For example, RGB. */
  kCGImageAlphaPremultipliedLast,  /* For example, premultiplied RGBA */
  kCGImageAlphaPremultipliedFirst, /* For example, premultiplied ARGB */
  kCGImageAlphaLast,               /* For example, non-premultiplied RGBA */


  kCGImageAlphaFirst,              /* For example, non-premultiplied ARGB */
  kCGImageAlphaNoneSkipLast,       /* For example, RBGX. */
  kCGImageAlphaNoneSkipFirst,      /* For example, XRGB. */
  kCGImageAlphaOnly                /* No color data, alpha data only */
};

//Create a bitmap context

CG_EXTERN CGContextRef

CGBitmapContextCreate(

void *data, //如果data非空,指向一個記憶體區域,大小至少bytesPerRow *height的位元組。如果data為空,data上下文自動分配和釋放收回。

size_t width,//畫素寬

size_t height,//畫素高

size_t bitsPerComponent, //位的數量為每個元件的指定一個畫素

size_t bytesPerRow,//每一行的點陣圖的位元組,至少要寬*每個畫素的位元組

CGColorSpaceRef space, //指定一個顏色空間

CGBitmapInfo bitmapInfo//指定點陣圖是否應該包含一個alpha通道和它是如何產生的,以及是否元件是浮點或整數

)

//獲取UIImage畫素ARGB值

- (unsigned char *)getImageData:(UIImage*)image

{

CGImageRef imageref = [image CGImage];
    CGColorSpaceRef colorspace=CGColorSpaceCreateDeviceRGB();
       
    int width=CGImageGetWidth(imageref);
    int height=CGImageGetHeight(imageref);
    int bytesPerPixel=4;
    int bytesPerRow=bytesPerPixel*width;
    int bitsPerComponent = 8;
    
   unsigned char * imagedata=malloc(width*height*bytesPerPixel);
   
    CGContextRef cgcnt = CGBitmapContextCreate(imagedata,
                                               width,
                                               height,
                                               bitsPerComponent,
                                               bytesPerRow,
                                               colorspace,
                                               kCGImageAlphaPremultipliedFirst);
   //將影象寫入一個矩形
    CGRect therect = CGRectMake(0, 0, width, height);
    CGContextDrawImage(cgcnt, therect, imageref);
    

//釋放資源
    CGColorSpaceRelease(colorspace);

CGContextRelease(cgcnt);    
    
    for (int i = 0 ; i < 4*width*height; i++) {
        NSLog(@"UIImage(%d,%d) == %d",(i/4)%width,(i/4)/width,imagedata[i]);
        if (i%4==3) {
          NSLog(@"=================");
         }
}
                
    return imagedata;
}

//獲取UIImage畫素Gray值

- (unsigned char *)getImageData:(UIImage*)image

{

CGImageRef imageref = [image CGImage];

CGColorSpaceRef colorspace=CGColorSpaceCreateDeviceGray();
       
    int width=CGImageGetWidth(imageref);
    int height=CGImageGetHeight(imageref);
    int bytesPerPixel=1;
    int bytesPerRow=bytesPerPixel*width;
    int bitsPerComponent = 8;
    
    unsigned char * imagedata=malloc(width*height*bytesPerPixel);
   
   CGContextRef cgcnt = CGBitmapContextCreate(imagedata,
                                               width,
                                               height,
                                               bitsPerComponent,
                                               bytesPerRow,
                                               colorspace,
                                               kCGImageAlphaNone);
    //將影象寫入一個矩形
    CGRect therect = CGRectMake(0, 0, width, height);
    CGContextDrawImage(cgcnt, therect, imageref);
    

//釋放資源
    CGColorSpaceRelease(colorspace);

CGContextRelease(cgcnt);    
    
    for (int i = 0 ; i < width*height; i++) {
        NSLog(@"UIImage(%d,%d) == %d", i%width, i/width, imagedata[i]);
}
                
    return imagedata;
}


相關推薦

獲取UIImage資料

typedef CF_ENUM(uint32_t, CGImageAlphaInfo) {   kCGImageAlphaNone,               /* For example, RGB. */   kCGImageAlphaPremultipliedLast

iOS小Demo之獲取圖片資料

#define R(x) ( Mask8(x) ) #define G(x) ( Mask8(x >> 8 ) ) #define B(x) ( Mask8(x >> 16) ) -(void)getImagePixel {     UIIm

如何從UIImage或者CGImage獲取到圖片的資料

CFDataRefCopyImagePixels(CGImageRef inImage){returnCGDataProviderCopyData(CGImageGetDataProvider(inImage));} Use CFDataGetBytePtr to

uiimage 轉換為資料 以及從資料生成為uiimage

http://www.cnspirit.com/2011/04/uiimage-uiimage.html 生成RGBABitmapContext   CGContextRef CreateRGBABitmapContext (CGImageRef inImage){ 

SDL2---編譯SDL庫、測試播放簡單資料(YUV、RGB等)

本篇博文整理自雷神(雷霄驊https://blog.csdn.net/leixiaohua1020/article/list/3)多篇博文,多謝分享,在此致敬! SDL簡介: SDL庫的作用說白了就是封裝了複雜的視音訊底層操作,簡化了視音訊處理的難度。 以下轉自WiKi:

Android正確獲取螢幕和密度等

Android如何準確獲取螢幕寬高、密度。 需要注意在不同版本有點區別,4.2增加虛擬導航欄,導致舊的方法獲取的螢幕高度不包括導航欄。所以需要區分版本去獲取。 順便提下, 這貨WindowManager windowManager = activity.getWindo

opencv四種資料讀取方式

QQ:609162385 https://blog.csdn.net/cqltbe131421 直接上程式碼: Mat MainWindow::applyLookUp(const cv::Mat& image, const cv::Mat& lookup) { M

unity裡面獲取圖片座標問題

為了知道unity裡,texture.GetPixels()裡每個畫素的顏色到底是怎麼樣分佈的,我們進行了一個測試。上圖是一個4*4的貼圖,ps和unity裡顯示都是這樣。 public class testCol:MonoBehaviour {

OpenCV-CvMat的資料讀取方法

#include <iostream> #include <opencv2/opencv.hpp> #include <opencv2/highgui.hpp> using namespace std; using namespace

swing獲取固定長度的字串

/* * strValue: 需要擷取的字串 擷取固定畫素長度的字串 */ public String trimDownText(String strValue) { // jLa

使用Opencv獲取每個點的RGB顏色分量/HSV顏色分量

一.  所需結構體CvScalar結構體介紹typedef struct CvScalar {   double val[4]; //BGRA   }CvScalar; 二. 所需函式cvG

利用canvas獲取圖片

利用canvas的getImageData方法可以讀取畫布的某位置畫素值。 1.首先建立一個canvas物件, var canvas = document.createElement(‘canvas’); 2.獲取它的2d上下文。 var context

Android 獲取螢幕的方法

我們需要獲取Android手機或Pad的螢幕的物理尺寸,以便於介面的設計或是其他功能的實現。下面就介紹講一講如何獲取螢幕的物理尺寸。 下面的程式碼即可獲取螢幕的尺寸。在一個Activity的onCreate方法中,寫入如下程式碼: DisplayMetri

python 獲取指定顏色

# -*- coding: cp936 -*- from ctypes import * #引入winapi gdi32 = windll.gdi32 user32 = windll.user32 #獲取控制代碼 hdc = user32.GetDC(None) #獲取指定畫素的顏色 c = gdi32.Ge

MFC 獲取字串高度和寬度

方法一: // 取文字的尺寸 CRect rc; CFont *pOldfont=pdc->SelectObject(&fn); // 設定新字型 pDC-&g

Android菜鳥筆記-獲取攝像頭

前言: 獲取攝像頭的畫素值,通過獲取相機設定中支援拍照的最大寬度和最大高度就可算到攝像頭的畫素值了,當然跟手機廠商標稱的還是有差別的。比如標稱200W的通過計算1200*1600=1920000=192W≈200W。 定義CameraUtils類: import java.

iOS音視訊—FFmepg基礎知識:命令列工具使用&封裝格式&視訊編碼音訊編碼資料瞭解&視訊音訊取樣資料格式

iOS音視訊相關目錄 FFmepg基礎知識 封裝格式 1、封裝格式:mp4、mov、flv、wmv等等… 2、作用:視訊流+音訊流按照格式進行儲存在一個檔案中 3、MPEG2-TS格式:傳輸流,又稱TS、TP、MPEG-TS或M2T,用於音效、影象與資料的通訊協議。屬於

利用pyrealsense獲取深度圖,並進行對齊

系統:Ubuntu16.04 python版本:python2.7 核心版本:4.13.0 realsense SDK:librealsense1.12.1 python wrapper:pyrealsense2.2 這裡的pyrealsense2.2指的是pyrealsense

獲取圖片的寬和高()

* 方法一 cImg = Getpict() && 獲取 bmp, jpg, gif xImgObj = LoadPicture(cImg) With xImgObj lnWidth = Int(.Width/26.458) lnHei

讀取BMP影象每一點RGB資料

      對於24位bmp圖片,每一個畫素點存放著此點的RGB值。首先定義一個結構體,包含紅(red)、綠(green)、藍(blue)這三個欄位,如下: //畫素顏色值 typedef struct tagPOINT{ BYTE b; BYTE g; BYTE