2016-04-14 7 views
0

CImgのサブ画像を取得しようとしています。 get_crop()メソッドが必要なことを理解していますが、取得するサブイメージには、必要とするピクセル値は含まれていません。CImg get_crop()が間違ったピクセルを返す/ CImgのサブ画像を取得する

unsigned char* StringTextureGenerator::GetTexture(int &width, int &height) 
{ 
    cil::CImg<unsigned char>* tmp = new cil::CImg<unsigned char>(512, 512, 1, 4); 

    *tmp = _alphabet.get_crop(0, 0, 0, 0, 511, 511, 0, 3); 

    width = tmp->width(); 
    height = tmp->height(); 
    return tmp->data(); 
} 

アルファベットCImgは512x512x1x4で、rgbaイメージを含んでいます。私は全体にx = 0の画像取得しようとしていますテストのために - - 511、Y = 0 511 結果がこれです:

enter image description here

これは、予想される結果です。ファイルから読み込んだときに全体のイメージを取得しました。

しかし、私がサブイメージを取得しようとすると、奇妙なことが起こります。ここで

unsigned char* StringTextureGenerator::GetTexture(int &width, int &height) 
{ 
    cil::CImg<unsigned char>* tmp = new cil::CImg<unsigned char>(256, 256, 1, 4); 

    *tmp = _alphabet.get_crop(0, 0, 0, 0, 255, 255, 0, 3); 

    width = tmp->width(); 
    height = tmp->height(); 
    return tmp->data(); 
} 

私は、x = 0のピクセルを取得しています - 、255のy = 0 - 私は絵の左上の四分の一であることを期待255、。あなたは私がすべての128×128ブロックの左上の四分の一を得る見ることができるように

The result is this:

: 結果がこれです。それは私が望んでいないものです。

+0

入力したアルファベットの画像は、RGBAでも512x512でもない - RGBと674x554です。ヘルプが必要な場合は、正しい入力イメージを入力してください。 –

+0

あなたの答えをありがとう、私はもう別のライブラリを使用して問題を解決し、もはや画像とコードを持っていません。悲しそうに私はこれが問題であることを確認できません。 – Jhonny007

答えて

0

あなたのコードで何が起こっているのか分かりませんが、これは自分のマシンで正常に動作します。私はCImg v169を使用しています。私は、テスト画像としてこれを使用します。

enter image description here

そして、このコードを実行します。

#include <iostream> 
#include "CImg.h" 

using namespace cimg_library; 
int main() 
{ 
    CImg<unsigned char> alphabet = CImg<unsigned char>("alphabet.png"); 
    CImg<unsigned char> tmp = CImg<unsigned char>(512, 512, 1, 4); 

    //tmp = alphabet.get_crop(0, 0, 0, 0, 511, 511, 0, 3); 
    tmp = alphabet.get_crop(0, 0, 0, 0, 255, 255, 0, 3); 
    tmp.save_png("result.png"); 
} 

そして、私には正しいようれ、これを取得する:

enter image description here

を私はオプション付きコンパイル:

-Dcimg_use_png -lpng -lz 
関連する問題