樹心幽徑

« 20181126用Linux dd來為資料光碟建立iso檔。 | Main | 20181128讀取檔名文字檔產生影像陣列,再以column major合併(mtile6e.c) »

20181127用影像陣列將最多六塊圖磚合併在一起的工具程式(mtile6d.c)
2018/11/27,20:57

(1)編譯

g++  `Magick++-config --cxxflags --cppflags` -I/usr/local/include/ImageMagick-7  mtile6d.c `Magick++-config --ldflags --libs`  -L/usr/local/zlib/lib -lz   -Wall  -export-dynamic -lm -o mtile6d

(2)執行

treehrt@treehrt-BM6AE-BM1AE-BP1AE:~/lake$ ./mtile6d
圖磚合併程式的語法 ./mtile6d 1.png 2.png 3.png 4.png 5.png 6.png col row
輸出併圖結果檔為mtile6d.jpg


treehrt@treehrt-BM6AE-BM1AE-BP1AE:~/lake$ ./mtile6d 312x2689-4x3-cw1.png 312x2686-4x3-cw2.png 312x2683-4x3-cw3.png 312x2680-4x3-cw4.png 312x2677-4x3-cw5.png 312x2674-4x3-cw6.png 2 1
argv[1]=312x2689-4x3-cw1.png
argv[2]=312x2686-4x3-cw2.png
argv[3]=312x2683-4x3-cw3.png
argv[4]=312x2680-4x3-cw4.png
argv[5]=312x2677-4x3-cw5.png
argv[6]=312x2674-4x3-cw6.png

 0
 0(0,0)
 1
 1(1,0)
輸出六圖合併後的圖檔 xtile6d.jpg 成功!
treehrt@treehrt-BM6AE-BM1AE-BP1AE:~/lake$ mv xtile6d.jpg xtile6d2x1.jpg

 
treehrt@treehrt-BM6AE-BM1AE-BP1AE:~/lake$ ./mtile6d 312x2689-4x3-cw1.png 312x2686-4x3-cw2.png 312x2683-4x3-cw3.png 312x2680-4x3-cw4.png 312x2677-4x3-cw5.png 312x2674-4x3-cw6.png 2 3
argv[1]=312x2689-4x3-cw1.png
argv[2]=312x2686-4x3-cw2.png
argv[3]=312x2683-4x3-cw3.png
argv[4]=312x2680-4x3-cw4.png
argv[5]=312x2677-4x3-cw5.png
argv[6]=312x2674-4x3-cw6.png

 0
 0(0,0) 2(0,1) 4(0,2)
 1
 1(1,0) 3(1,1) 5(1,2)
輸出六圖合併後的圖檔 xtile6d.jpg 成功!
treehrt@treehrt-BM6AE-BM1AE-BP1AE:~/lake$ mv xtile6d.jpg xtile6d2x3.jpg


treehrt@treehrt-BM6AE-BM1AE-BP1AE:~/lake$ ./mtile6d 312x2689-4x3-cw1.png 312x2686-4x3-cw2.png 312x2683-4x3-cw3.png 312x2680-4x3-cw4.png 312x2677-4x3-cw5.png 312x2674-4x3-cw6.png 3 2
argv[1]=312x2689-4x3-cw1.png
argv[2]=312x2686-4x3-cw2.png
argv[3]=312x2683-4x3-cw3.png
argv[4]=312x2680-4x3-cw4.png
argv[5]=312x2677-4x3-cw5.png
argv[6]=312x2674-4x3-cw6.png

 0
 0(0,0) 3(0,1)
 1
 1(1,0) 4(1,1)
 2
 2(2,0) 5(2,1)
輸出六圖合併後的圖檔 xtile6d.jpg 成功!
treehrt@treehrt-BM6AE-BM1AE-BP1AE:~/lake$ mv xtile6d.jpg xtile6d3x2.jpg

 
treehrt@treehrt-BM6AE-BM1AE-BP1AE:~/lake$ ./mtile6d 312x2689-4x3-cw1.png 312x2686-4x3-cw2.png 312x2683-4x3-cw3.png 312x2680-4x3-cw4.png 312x2677-4x3-cw5.png 312x2674-4x3-cw6.png 6 1
argv[1]=312x2689-4x3-cw1.png
argv[2]=312x2686-4x3-cw2.png
argv[3]=312x2683-4x3-cw3.png
argv[4]=312x2680-4x3-cw4.png
argv[5]=312x2677-4x3-cw5.png
argv[6]=312x2674-4x3-cw6.png

 0
 0(0,0)
 1
 1(1,0)
 2
 2(2,0)
 3
 3(3,0)
 4
 4(4,0)
 5
 5(5,0)
輸出六圖合併後的圖檔 xtile6d.jpg 成功!
treehrt@treehrt-BM6AE-BM1AE-BP1AE:~/lake$ mv xtile6d.jpg xtile6d6x1.jpg

(3)程式碼:mtile6d.c

http://oldwww.kmvs.km.edu.tw/lf/index.php?op=ViewResource&blogId=70&resource=mtile6d.c


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <Magick++.h>

using namespace Magick;
void xtile(char *argv[],int row,int col){
    Image ima[6];
    for (int i=0;i<6;i++){
        ima[i]=Image(argv[i+1]);
        printf("argv[%d]=%s\n",i+1,argv[i+1]);
    }
    Geometry size =  ima[0].size();
    int w=size.width();
    int h=size.height();
    Image im(Magick::Geometry(w*col,h*row),"white");
    for(int r=0;r<row;r++){
        printf("\n %d\n",r);
        for(int c=0;c<col;c++){
            int p=c*row+r;
            if(p<6){
                im.composite(ima[p], c*w, r*h, OverCompositeOp);
            }
            printf(" %d(%d,%d)",p,r,c);
        }
    }
    printf("\n");
    im.write("xtile6d.jpg");
    printf("輸出六圖合併後的圖檔 xtile6d.jpg 成功!\n");
}

int main(int argc, char *argv[]){
    if (argc!=9) {
        printf("圖磚合併程式的語法 ./mtile6d 1.png 2.png 3.png 4.png 5.png 6.png row col\n");
        printf("輸出併圖結果檔為mtile6d.jpg\n");
        exit(-1);
    }
    int row=atoi(argv[7]);
    int col=atoi(argv[8]);
    xtile(argv,row,col);
}

(4)輸出圖之一: xtile6d2x1.jpg

alt

xtile6d2x1.jpg

迴響

 
Accessible and Valid XHTML 1.0 Strict and CSS Powered by LifeType