getPixelsで得られる画素値の順番はZ字順だった
d:id:Guernsey:20080216ではZ字順ではないらしいと書いていた.この投稿はZ字順であると確認した事についてのメモだ.
人為的に作成した画像を読み込んで確認したらいい.タテヨコ4の,16ピクセルある画像を作った.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
OpenCVライブラリを利用して作った.ソースファイルenumrateImage.cppを示す.
#include <cv.h> #include <highgui.h> #pragma comment(lib,"cv.lib") #pragma comment(lib,"cxcore.lib") #pragma comment(lib,"highgui.lib") int main(void) { const int SIZE = 4; IplImage *enumrateImage = cvCreateImage(cvSize(SIZE,SIZE),IPL_DEPTH_8U, 1); for(int y = 0; y < SIZE; y++){ for(int x = 0; x < SIZE; x++){ ((uchar*)(enumrateImage->imageData + enumrateImage->widthStep*y)) [x] = y * SIZE + x; } } cvSaveImage("enumrateImage.png", enumrateImage); cvReleaseImage(&enumrateImage); return 0; }
出来上がった画像enumrateImage.png()が,想像通りに作られているかを,Paint.NET v3.22で確認した().
次はgetPixelsを実施する.NetBeans IDE6.0.1でファイルをデバッグ実行した.そのmainメソッドを示す.
public static void main(String[] args) { // 画像を読み込む final int SIZE = 4; File inputImageFile = new File("C:/enumrateImage.png"); BufferedImage inputImage = null; try { inputImage = ImageIO.read(inputImageFile); } catch (IOException ex) { Logger.getLogger(searchImage.class.getName()).log(Level.SEVERE, null, ex); } int[] data = new int[SIZE * SIZE]; inputImage.getData().getPixels(0, 0, SIZE, SIZE, data); data[1] = 4; }