[Gdiplus] _ [Principiante] _ [Utilice el modo de interpolación para controlar la calidad del zoom de la imagen]

Escenas

  1. En el desarrollo de WTL programas, Gdiplusdibujar PNGse utilizan imágenes. A veces se encontrará con las siguientes situaciones. Al dibujar una imagen original con la misma anchura y altura, la imagen se ve claramente en la interfaz, y cuando la PNGanchura y la altura se reducen, la imagen dibujada obviamente irregular. ¿Cuál es la razón?

Descripción

  1. Utilice el Gdiplus::Graphicsmétodo de objeto DrawImagepara dibujar el Rectárea rectangular de origen de la imagen original en el destino Rect, es decir, si el ancho y el alto del área de destino y el área de origen son inconsistentes, la imagen se ampliará y dibujará. Por ejemplo, tenemos un 256x256ícono, y luego necesitamos dibujar el ícono de zoom en la esquina superior izquierda de la barra de título, y el ícono de esta posición no solo es necesario 32x32, si no tiene un 32x32ícono pequeño separado , debemos llamar al ícono grande DrawImagecuando Especifique el ancho y la altura del área de destino 32x32, de modo Graphicsque el icono se escale al dibujar, por lo que no es necesario crear uno nuevo Gdiplus::Bitmappara dibujar.

  2. GraphicsAl escalar el icono, el Interpolation Modemodo de interpolación determina la calidad del escalado. Por graphics.SetInterpolationModeestablecer el modo de interpolación, por graphics.GetInterpolationModela obtención del modo de interpolación actual.

  3. En el archivo de encabezado <gdiplusenums.h>, las siguientes constantes de enumeración son opcionales. InterpolationModeDefaultEl valor es el valor del modo de interpolación predeterminado, que es igual a InterpolationModeLowQualitye igual a InterpolationModeBilinear. Y InterpolationModeHighQualityes compatible con la opción de calidad máxima predeterminada aquí porque la calidad es la mejor InterpolationModeHighQualityBicubic, por lo InterpolationModeHighQualityque es igual InterpolationModeHighQualityBicubic.

    typedef enum InterpolationMode {
          
          
      InterpolationModeInvalid,
      InterpolationModeDefault, // 默认,即等于 InterpolationModeBilinear
      InterpolationModeLowQuality, // 默认,即等于InterpolationModeBilinear
      InterpolationModeHighQuality, // 最高质量,即等于InterpolationModeHighQualityBicubic
      InterpolationModeBilinear, // 双线性插值
      InterpolationModeBicubic, // 双三次插值
      InterpolationModeNearestNeighbor, // 最近邻插值
      InterpolationModeHighQualityBilinear,
      InterpolationModeHighQualityBicubic
    } ;
    
  4. El siguiente código se puede utilizar para verificar su relación: La calidad del modo de interpolación es la misma que su valor constante de enumeración, de menor a mayor. Si desea establecer la mayor calidad de zoom, utilice InterpolationModeHighQualityBicubicparámetros. Por supuesto, cuanto mayor sea la calidad, más recursos informáticos se necesitan. A medida que CPUmejora el rendimiento, esta pérdida puede ignorarse. Si sigue el algoritmo de optimización más alto admitido por el sistema, puede configurarlo InterpolationModeHighQualityy el valor más alto actual sigue siendo igual a InterpolationModeHighQualityBicubic.

    graphics.SetInterpolationMode(InterpolationModeLowQuality);
    auto mode = graphics.GetInterpolationMode(); // mode:InterpolationModeBilinear
    

ejemplo

  1. Echemos un vistazo a un 128x128icono que utiliza el modo de interpolación predeterminado y más alto. La calidad es muy diferente. El círculo exterior de baja calidad tiene rebabas y la alta calidad es suave.

InterpolationModeBilinear (InterpolationModeLowQuality)

Figura 1:
Inserte la descripción de la imagen aquí

InterpolationModeHighQualityBicubic (InterpolationModeHighQuality)

Figura 2:
Inserte la descripción de la imagen aquí

Imagen original

Inserte la descripción de la imagen aquí

referencia

Uso del modo de interpolación para controlar la calidad de la imagen durante el escalado

Enumeración de InterpolationMode

Supongo que te gusta

Origin blog.csdn.net/infoworld/article/details/109316839
Recomendado
Clasificación