0

OpenGLを使用して画像を画面に描画しています。ズーム機能により、画像が z 軸を介して移動することがあります。たとえば、ユーザーが 3200x2000 のサイズの画像を持っている場合、画面に収まらないためズームアウトします。そして、ズームアウトした後、彼は画像の一部をトリミングしたいと考えています。選択矩形を登録します。次に、左下隅の座標と、右上隅と左下隅の間の距離を使用します。座標は次のように使用されます。

//I get one coordinate from mouse down, and then last point from moueDragged events. 
float firstx = mouseDownFirst.x * (zoomSlider.floatValue * (-10));
float firsty = mouseDownFirst.y * (zoomSlider.floatValue * (-10));
float lastx = mouseDragLast.x * (zoomSlider.floatValue * (-10));
float lasty = mouseDragLast.y * (zoomSlider.floatValue * (-10));

//Then I draw selection rectangle to screen.
glBegin(GL_QUADS);
glVertex2f(firstx, firsty);
glVertex2f(firstx, lasty);
glVertex2f(lastx, lasty);
glVertex2f(lastx, firsty);
glEnd();
glFlush();

//and do crop. Because image is drawn to framebuffer, I will read frame buffer info and make image from it. Coordinates are being translated back to normal
firstx = firstx / (zoomSlider.floatValue * (-10));
firsty = firsty / (zoomSlider.floatValue * (-10))
lastx = lastx / (zoomSlider.floatValue * (-10));
lasty = lasty / (zoomSlider.floatValue * (-10));


glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framebuffer);
glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, [tempRep bitmapData]);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

CIImage *firstImage = [[CIImage alloc] initWithBitmapImageRep:tempRep];

//cropping image to rect and getting result image
float distanceWidth = lastx - firstx;
float distanceHeight = lasty - firsty;

CIImage* secondImage = [firstImage imageByCroppingToRect:CGRectMake(firstx, firsty, distanceWidth, distanceHeight)];

CIFilter* transform = [CIFilter filterWithName:@"CIAffineTransform"];
NSAffineTransform* affineTransform = [NSAffineTransform transform];
[affineTransform translateXBy:-firstx yBy:-firsty];
[transform setValue:affineTransform forKey:@"inputTransform"];
[transform setValue:secondImage forKey:@"inputImage"];
CIImage* lastImage = [transform valueForKey:@"outputImage"];

しかし、それは悪いイメージを返します。私が選んだものではありません。例えば:

選択 ここに画像の説明を入力

トリミングされた画像
ここに画像の説明を入力

4

0 に答える 0