144 if (ID != 0L) { 145 // Disposer will destroy forgotten transform 146 disposerReferent = new Object(); 147 } 148 inFormatter = in.pixelType; 149 isInIntPacked = in.isIntPacked; 150 151 outFormatter = out.pixelType; 152 isOutIntPacked = out.isIntPacked; 153 154 ID = LCMS.createNativeTransform(profileIDs, renderType, 155 inFormatter, isInIntPacked, 156 outFormatter, isOutIntPacked, 157 disposerReferent); 158 } 159 160 LCMS.colorConvert(this, in, out); 161 } 162 163 public void colorConvert(BufferedImage src, BufferedImage dst) { 164 if (LCMSImageLayout.isSupported(src) && 165 LCMSImageLayout.isSupported(dst)) 166 { 167 doTransform(new LCMSImageLayout(src), new LCMSImageLayout(dst)); 168 return; 169 } 170 LCMSImageLayout srcIL, dstIL; 171 Raster srcRas = src.getRaster(); 172 WritableRaster dstRas = dst.getRaster(); 173 ColorModel srcCM = src.getColorModel(); 174 ColorModel dstCM = dst.getColorModel(); 175 int w = src.getWidth(); 176 int h = src.getHeight(); 177 int srcNumComp = srcCM.getNumColorComponents(); 178 int dstNumComp = dstCM.getNumColorComponents(); 179 int precision = 8; 180 float maxNum = 255.0f; 181 for (int i = 0; i < srcNumComp; i++) { 182 if (srcCM.getComponentSize(i) > 8) { 183 precision = 16; 184 maxNum = 65535.0f; 185 } 186 } 187 for (int i = 0; i < dstNumComp; i++) { 188 if (dstCM.getComponentSize(i) > 8) { 189 precision = 16; 190 maxNum = 65535.0f; 422 423 // color convert srcLine to dstLine 424 doTransform(srcIL, dstIL); 425 426 // store dst scanline 427 xd = dst.getMinX(); 428 idx = 0; 429 for (int x = 0; x < w; x++, xd++) { 430 for (int i = 0; i < dstNumBands; i++) { 431 sample = ((dstLine[idx++] & 0xffff) * dstScaleFactor[i]) + 432 dstUseMinVal[i]; 433 dst.setSample(xd, yd, i, sample); 434 } 435 } 436 } 437 } 438 439 public void colorConvert(Raster src, WritableRaster dst) { 440 441 LCMSImageLayout srcIL, dstIL; 442 // Can't pass src and dst directly to CMM, so process per scanline 443 SampleModel srcSM = src.getSampleModel(); 444 SampleModel dstSM = dst.getSampleModel(); 445 int srcTransferType = src.getTransferType(); 446 int dstTransferType = dst.getTransferType(); 447 int w = src.getWidth(); 448 int h = src.getHeight(); 449 int srcNumBands = src.getNumBands(); 450 int dstNumBands = dst.getNumBands(); 451 int precision = 8; 452 float maxNum = 255.0f; 453 for (int i = 0; i < srcNumBands; i++) { 454 if (srcSM.getSampleSize(i) > 8) { 455 precision = 16; 456 maxNum = 65535.0f; 457 } 458 } 459 for (int i = 0; i < dstNumBands; i++) { 460 if (dstSM.getSampleSize(i) > 8) { 461 precision = 16; | 144 if (ID != 0L) { 145 // Disposer will destroy forgotten transform 146 disposerReferent = new Object(); 147 } 148 inFormatter = in.pixelType; 149 isInIntPacked = in.isIntPacked; 150 151 outFormatter = out.pixelType; 152 isOutIntPacked = out.isIntPacked; 153 154 ID = LCMS.createNativeTransform(profileIDs, renderType, 155 inFormatter, isInIntPacked, 156 outFormatter, isOutIntPacked, 157 disposerReferent); 158 } 159 160 LCMS.colorConvert(this, in, out); 161 } 162 163 public void colorConvert(BufferedImage src, BufferedImage dst) { 164 LCMSImageLayout srcIL, dstIL; 165 166 dstIL = LCMSImageLayout.createImageLayout(dst); 167 168 if (dstIL != null) { 169 srcIL = LCMSImageLayout.createImageLayout(src); 170 if (srcIL != null) { 171 doTransform(srcIL, dstIL); 172 return; 173 } 174 } 175 176 Raster srcRas = src.getRaster(); 177 WritableRaster dstRas = dst.getRaster(); 178 ColorModel srcCM = src.getColorModel(); 179 ColorModel dstCM = dst.getColorModel(); 180 int w = src.getWidth(); 181 int h = src.getHeight(); 182 int srcNumComp = srcCM.getNumColorComponents(); 183 int dstNumComp = dstCM.getNumColorComponents(); 184 int precision = 8; 185 float maxNum = 255.0f; 186 for (int i = 0; i < srcNumComp; i++) { 187 if (srcCM.getComponentSize(i) > 8) { 188 precision = 16; 189 maxNum = 65535.0f; 190 } 191 } 192 for (int i = 0; i < dstNumComp; i++) { 193 if (dstCM.getComponentSize(i) > 8) { 194 precision = 16; 195 maxNum = 65535.0f; 427 428 // color convert srcLine to dstLine 429 doTransform(srcIL, dstIL); 430 431 // store dst scanline 432 xd = dst.getMinX(); 433 idx = 0; 434 for (int x = 0; x < w; x++, xd++) { 435 for (int i = 0; i < dstNumBands; i++) { 436 sample = ((dstLine[idx++] & 0xffff) * dstScaleFactor[i]) + 437 dstUseMinVal[i]; 438 dst.setSample(xd, yd, i, sample); 439 } 440 } 441 } 442 } 443 444 public void colorConvert(Raster src, WritableRaster dst) { 445 446 LCMSImageLayout srcIL, dstIL; 447 dstIL = LCMSImageLayout.createImageLayout(dst); 448 if (dstIL != null) { 449 srcIL = LCMSImageLayout.createImageLayout(src); 450 if (srcIL != null) { 451 doTransform(srcIL, dstIL); 452 return; 453 } 454 } 455 // Can't pass src and dst directly to CMM, so process per scanline 456 SampleModel srcSM = src.getSampleModel(); 457 SampleModel dstSM = dst.getSampleModel(); 458 int srcTransferType = src.getTransferType(); 459 int dstTransferType = dst.getTransferType(); 460 int w = src.getWidth(); 461 int h = src.getHeight(); 462 int srcNumBands = src.getNumBands(); 463 int dstNumBands = dst.getNumBands(); 464 int precision = 8; 465 float maxNum = 255.0f; 466 for (int i = 0; i < srcNumBands; i++) { 467 if (srcSM.getSampleSize(i) > 8) { 468 precision = 16; 469 maxNum = 65535.0f; 470 } 471 } 472 for (int i = 0; i < dstNumBands; i++) { 473 if (dstSM.getSampleSize(i) > 8) { 474 precision = 16; |