私は大きなサイズ(960x960)から32x32ほどの小さな画像に縮小しようとしています。バッファを使用してイメージを縮小/補間するアルゴリズムですか?
int width = scale*img->getWidth();
int height = scale*img->getHeight();
Image* scaledImage = new Image();
auto dataLen = width * height * x * sizeof(unsigned char);
auto data2 = static_cast<unsigned char*>(malloc(dataLen));
scaledImage->initWithRawData(data2, dataLen, width, height, 8);
そして、私がやって出力画像の個々のピクセルを設定することができます。私がやって出力画像を作成することができます
Image* img = new Image();
img->initWithImageFile(fileNameWithPath);
int x=3;
if(img->hasAlpha()){
x=4;
}
unsigned char *data = new unsigned char[img->getDataLen()*x];
data = img->getData();
// [0][0] => Left-Top Pixel !
// But cocos2d Location Y-axis is Bottom(0) to Top(max)
//This is for changing pixels in the original image
//Skip this loop if there are no changes to be made (converting to grayscale etc).
for(int i=0;i<img->getWidth();i++)
{
for(int j=0;j<img->getHeight();j++)
{
unsigned char *pixel = data + (i + j * img->getWidth()) * x;
// You can see/change pixels' RGBA value(0-255) here !
unsigned char r = *pixel;
unsigned char g = *(pixel + 1);
unsigned char b = *(pixel + 2) ;
unsigned char a = *(pixel + 3);
//pixel[2] = 255; //Example: Setting the blue component to 255
}
}
:私は、私は生のピクセルを取得するには、次のコードを使用しています:
unsigned char *pixel2 = data2 + (i + j * width) * x;
質問は(必要と少ないメモリ場合、より多くのCPUを使用するように有利に、最小のCPUとメモリを使用して)/平均効率的に原画像から画素を補間する方法です。
課題:
- ダウンスケール画像と元の画像が 倍数完璧ではないかもしれません。
- ダウンスケーリングされたイメージは、元のイメージサイズの の0.1と小さくてもかまいません。
- ほとんどの画像は元の画像の0.4〜0.1に縮小されるため、これらが最も重要な範囲です。
EDIT:(バイリニアの代わりに)他の補間アルゴリズムが適していると思えば、私はそれを開いています。課題は、個々のピクセルを平均/補間する効率的なアルゴリズムを書くことです。
元の画像の個々のピクセルをどのように補間しますか?
ここでは特定の質問は表示されません。 – xaxxon
質問は1回のパスで個々のピクセルを補間する方法です... –
この質問は非常によく知られているようです。 – xaxxon