BufferedImage имеет конструктор, в котором вы можете указать WriteableRaster.
Выбирая буферизованное изображение по умолчанию, сохраняя каждый пиксель в int, он использует IntegerInterleavedRaster.
ColorModel выможно использовать ColorModel.getRGBDefault ().
int imageWidth = 638, imageHeight = 480;
int dataImageWidth = 640;
SampleModel sm = new SinglePixelPackedSampleModel(TYPE_INT, imageWidth, imageHeight, dataImageWidth, new int[] { 0xff0000, 0xff00, 0xff });
DataBuffer db = new DataBufferInt(dataImageWidth * imageHeight);
WritableRaster r = Raster.createWritableRaster(sm, db, new Point());
BufferedImage image = new BufferedImage(ColorModel.getRGBDefault(), r, false, null);
Обратите внимание на scanlineStride в SinglePixelPackedSampleModel (второй последний параметр).
Еще один гораздо более простой подход заключается в использовании метода BufferedImage getSubimage.
BufferedImage fullImage = new BufferedImage(dataImageWidth, imageHeight);
BufferedImage subImage = fullImage.getSubimage(0, 0, imageWidth, imageHeight);