public static ImageInfo<BufferedImage> getShortGrayImageInfo() { return new ImageInfo<BufferedImage>( BufferedImage.TYPE_USHORT_GRAY, new CLImageFormat(CLImageFormat.ChannelOrder.LUMINANCE, CLImageFormat.ChannelDataType.UNormInt16), new ImageDataGetter<BufferedImage>() { public Buffer getData(BufferedImage image, Buffer optionalExistingOutput, boolean directBuffer, boolean allowDeoptimizingDirectRead, ByteOrder byteOrder) {
public boolean isIntBased() { if (channelDataType == null || channelOrder == null) return false; switch (getChannelOrder()) { case ARGB: case BGRA: case RGBA: switch (getChannelDataType()) { case SNormInt8: case SignedInt8: case UNormInt8: case UnsignedInt8: return true; } } return false; } public final ChannelOrder getChannelOrder() {
CLKernel kernel = program.createKernel("test"); ChannelDataType channelDataType = CLImageFormat.INT_ARGB_FORMAT.getChannelDataType(); for (ChannelOrder channelOrder : Arrays.asList(ChannelOrder.BGRA, ChannelOrder.RGBA)) { CLImageFormat imageFormat = new CLImageFormat(channelOrder, channelDataType); switch (climage.getFormat().getChannelOrder()) { case RGBA: red = px;
/** * Convert a {@link CLImage2D} to an {@link FImage}. * * @param queue the {@link CLQueue} * @param evt event to wait for * @param clImage the image to convert * @param oiImage the output image (or null) * @return the output image */ public static FImage convert(CLQueue queue, CLEvent evt, CLImage2D clImage, FImage oiImage) { if (clImage.getFormat().getChannelOrder() == ChannelOrder.RGBA) { return convert(queue, evt, clImage, oiImage == null ? null : new MBFImage(oiImage)).getBand(0); } final int width = (int) clImage.getWidth(); final int height = (int) clImage.getHeight(); final ByteBuffer bb = ByteBuffer.allocateDirect(width * height * FLOAT_SIZE); bb.order(clImage.getContext().getByteOrder()); final FloatBuffer fb = bb.asFloatBuffer(); clImage.read(queue, 0, 0, width, height, clImage.getRowPitch(), fb, true, evt); return convertFromFB(fb, width, height, oiImage); }
Pointer<cl_image_format> pImageFormat = getPointer(format.to_cl_image_format()); Pointer<?> pBuffer = buffer == null ? null : pointerToBuffer(buffer); long mem;
Pointer<cl_image_format> pImageFormat = getPointer(format.to_cl_image_format()); Pointer<?> pBuffer = buffer == null ? null : pointerToBuffer(buffer); long mem;
public boolean isIntBased() { if (channelDataType == null || channelOrder == null) return false; switch (getChannelOrder()) { case ARGB: case BGRA: case RGBA: switch (getChannelDataType()) { case SNormInt8: case SignedInt8: case UNormInt8: case UnsignedInt8: return true; } } return false; } public final ChannelOrder getChannelOrder() {
public static ImageInfo<BufferedImage> getShortGrayImageInfo() { return new ImageInfo<BufferedImage>( BufferedImage.TYPE_USHORT_GRAY, new CLImageFormat(CLImageFormat.ChannelOrder.LUMINANCE, CLImageFormat.ChannelDataType.UNormInt16), new ImageDataGetter<BufferedImage>() { public Buffer getData(BufferedImage image, Buffer optionalExistingOutput, boolean directBuffer, boolean allowDeoptimizingDirectRead, ByteOrder byteOrder) {
Pointer<cl_image_format> pImageFormat = getPointer(format.to_cl_image_format()); Pointer<?> pBuffer = buffer == null ? null : pointerToBuffer(buffer); long mem;
static int getBufferedImageType(CLImageFormat imageFormat) { if (imageFormat == null || imageFormat.getChannelOrder() == null || imageFormat.getChannelDataType() == null) return 0; switch (imageFormat.getChannelOrder()) { case INTENSITY: case LUMINANCE: switch (imageFormat.getChannelDataType()) { case UNormInt8: case UnsignedInt8: case BGRA: case RGBA: switch (imageFormat.getChannelDataType()) { case UNormInt8: case UnsignedInt8: switch (imageFormat.getChannelDataType()) { case UNormInt8: case UnsignedInt8:
public static ImageInfo<BufferedImage> getByteGrayImageInfo() { return new ImageInfo<BufferedImage>( BufferedImage.TYPE_BYTE_GRAY, new CLImageFormat(CLImageFormat.ChannelOrder.LUMINANCE, CLImageFormat.ChannelDataType.SignedInt8), new ImageDataGetter<BufferedImage>() { public Buffer getData(BufferedImage image, Buffer optionalExistingOutput, boolean directBuffer, boolean allowDeoptimizingDirectRead, ByteOrder byteOrder) {
Pointer<cl_image_format> pImageFormat = getPointer(format.to_cl_image_format()); Pointer<?> pBuffer = buffer == null ? null : pointerToBuffer(buffer); long mem;
static int getBufferedImageType(CLImageFormat imageFormat) { if (imageFormat == null || imageFormat.getChannelOrder() == null || imageFormat.getChannelDataType() == null) return 0; switch (imageFormat.getChannelOrder()) { case INTENSITY: case LUMINANCE: switch (imageFormat.getChannelDataType()) { case UNormInt8: case UnsignedInt8: case BGRA: case RGBA: switch (imageFormat.getChannelDataType()) { case UNormInt8: case UnsignedInt8: switch (imageFormat.getChannelDataType()) { case UNormInt8: case UnsignedInt8:
public static ImageInfo<BufferedImage> getByteGrayImageInfo() { return new ImageInfo<BufferedImage>( BufferedImage.TYPE_BYTE_GRAY, new CLImageFormat(CLImageFormat.ChannelOrder.LUMINANCE, CLImageFormat.ChannelDataType.SignedInt8), new ImageDataGetter<BufferedImage>() { public Buffer getData(BufferedImage image, Buffer optionalExistingOutput, boolean directBuffer, boolean allowDeoptimizingDirectRead, ByteOrder byteOrder) {
private static ChannelOrder getBestFImageChannelOrder(CLContext context) { CLImageFormat[] formats = context.getSupportedImageFormats(CLMem.Flags.ReadWrite, CLMem.ObjectType.Image2D); List<ChannelOrder> found = new ArrayList<ChannelOrder>(); for (CLImageFormat fmt : formats) { if (fmt.getChannelDataType() == ChannelDataType.Float) found.add(fmt.getChannelOrder()); } for (ChannelOrder co : bestFImageChannels) { if (found.contains(co)) return co; } return ChannelOrder.RGBA; }
/** * Return image format descriptor specified when image is created with CLContext.create{Input|Output|InputOutput}{2D|3D}. */ @InfoName("CL_IMAGE_FORMAT") public CLImageFormat getFormat() { if (format == null) { format = new CLImageFormat(new cl_image_format(infos.getMemory(getEntity(), CL_IMAGE_FORMAT))); } return format; }
public static ImageInfo<BufferedImage> getBufferedImageInfo(CLImageFormat imageFormat) { if (imageFormat == null || imageFormat.getChannelOrder() == null || imageFormat.getChannelDataType() == null) return null; switch (imageFormat.getChannelOrder()) { case BGRA: case RGBA: switch (imageFormat.getChannelDataType()) { case UNormInt16: case UnsignedInt16: case SignedInt16: return getARGBShortGrayImageInfo(imageFormat); } } return getBufferedImageInfo(getBufferedImageType(imageFormat)); } static int getBufferedImageType(CLImageFormat imageFormat) {
/** * Return image format descriptor specified when image is created with CLContext.create{Input|Output|InputOutput}{2D|3D}. */ @InfoName("CL_IMAGE_FORMAT") public CLImageFormat getFormat() { if (format == null) { format = new CLImageFormat(new cl_image_format(infos.getMemory(getEntity(), CL_IMAGE_FORMAT))); } return format; }
public static ImageInfo<BufferedImage> getBufferedImageInfo(CLImageFormat imageFormat) { if (imageFormat == null || imageFormat.getChannelOrder() == null || imageFormat.getChannelDataType() == null) return null; switch (imageFormat.getChannelOrder()) { case BGRA: case RGBA: switch (imageFormat.getChannelDataType()) { case UNormInt16: case UnsignedInt16: case SignedInt16: return getARGBShortGrayImageInfo(imageFormat); } } return getBufferedImageInfo(getBufferedImageType(imageFormat)); } static int getBufferedImageType(CLImageFormat imageFormat) {
@Override public void analyseImage(FImage image) { CLQueue queue = context.createDefaultQueue(); CLImage2D in = CLImageConversion.convert(context, image); CLImageFormat outFmt = new CLImageFormat(ChannelOrder.RGBA, ChannelDataType.Float); CLImage2D out = context.createImage2D(CLMem.Usage.Output, outFmt, in.getWidth(), in.getHeight()); kernel.setArgs(in, out); CLEvent evt = kernel.enqueueNDRange(queue, new int[] {(int) in.getWidth(), (int) in.getHeight()}); MBFImage res = CLImageConversion.convert(queue, evt, out, new MBFImage(image.width, image.height, 4)); this.magnitude = res.bands.get(0); this.orientation = res.bands.get(1); this.gradientX = res.bands.get(2); this.gradientY = res.bands.get(3); in.release(); out.release(); queue.release(); }