Imebra - 改变颜色对比

时间:2017-01-06 07:17:52

标签: android imebra

我能够使用imebra加载dicom图像,并希望更改图像的颜色,但无法找到方法。我希望在Dicomite应用程序中实现功能。

以下是我的代码:

public void loadDCM() {

  com.imebra.DataSet loadedDataSet = com.imebra.CodecFactory.load(dicomPath.getPath());

  com.imebra.VOIs voi = loadedDataSet.getVOIs();

  com.imebra.Image image = loadedDataSet.getImageApplyModalityTransform(0);
  //        com.imebra.Image image = loadedDataSet.getImage(0);
  String colorSpace = image.getColorSpace();


  long width = image.getWidth();
  long height = image.getHeight();

  TransformsChain transformsChain = new TransformsChain();
  com.imebra.DrawBitmap drawBitmap = new com.imebra.DrawBitmap(transformsChain);


  com.imebra.TransformsChain chain = new com.imebra.TransformsChain();
  if (com.imebra.ColorTransformsFactory.isMonochrome(image.getColorSpace())) {
   // Allocate a VOILUT transform. If the DataSet does not contain any pre-defined
   //  settings then we will find the optimal ones.
   VOILUT voilutTransform = new VOILUT();

   // Retrieve the VOIs (center/width pairs)
   com.imebra.VOIs vois = loadedDataSet.getVOIs();

   // Retrieve the LUTs
   List < LUT > luts = new ArrayList < LUT > ();
   for (long scanLUTs = 0;; scanLUTs++) {
    try {
     luts.add(loadedDataSet.getLUT(new com.imebra.TagId(0x0028, 0x3010), scanLUTs));
    } catch (Exception e) {
     break;
    }
   }

   if (!vois.isEmpty()) {
    voilutTransform.setCenterWidth(vois.get(0).getCenter(), vois.get(0).getWidth());
   } else if (!luts.isEmpty()) {
    voilutTransform.setLUT(luts.get(0));
   } else {
    voilutTransform.applyOptimalVOI(image, 0, 0, width, height);
   }

   chain.addTransform(voilutTransform);

   com.imebra.DrawBitmap draw = new com.imebra.DrawBitmap(chain);

   // Ask for the size of the buffer (in bytes)

   long requestedBufferSize = draw.getBitmap(image, drawBitmapType_t.drawBitmapRGBA, 4, new byte[0]);

   byte buffer[] = new byte[(int) requestedBufferSize]; // Ideally you want to reuse this in subsequent calls to getBitmap()
   ByteBuffer byteBuffer = ByteBuffer.wrap(buffer);

   // Now fill the buffer with the image data and create a bitmap from it
   drawBitmap.getBitmap(image, drawBitmapType_t.drawBitmapRGBA, 4, buffer);
   Bitmap renderBitmap = Bitmap.createBitmap((int) image.getWidth(), (int) image.getHeight(), Bitmap.Config.ARGB_8888);
   renderBitmap.copyPixelsFromBuffer(byteBuffer);

   image_view.setImageBitmap(renderBitmap);

  }

1 个答案:

答案 0 :(得分:0)

如果您正在处理单色图像并且想要修改演示文稿的亮度/对比度,则必须修改VOILUT转换的参数(代码中的voilutTransform变量)。

在计算要显示的位图之前,您可以获取变换应用于图像的中心和宽度,然后在再次调用drawBitmap.getBitmap之前修改它们。

,例如,将对比度加倍:

voilutTransform.setCenterWidth(voilutTransform.getCenter(), voilutTransform.getWidth() / 2);

// Now fill the buffer with the image data and create a bitmap from it
drawBitmap.getBitmap(image, drawBitmapType_t.drawBitmapRGBA, 4, buffer);

有关中心/宽度的详细信息,请参阅this answer