Présentez brièvement le principe du réglage de la luminosité/contraste de l'image Photoshop :
1. Formule de l'algorithme de contraste.
Photoshop traite l'incrément de contraste en fonction respectivement des valeurs positives et négatives de la valeur donnée.
Si newRGB est utilisé pour représenter les nouvelles composantes R, V et B du pixel de l'image, RVB représente les composantes R, V et B du pixel de l'image, Threshold est le seuil donné et Contraste est l'incrément de contraste. Lorsque le Contraste est supérieur à 0 Quand :
1) newRGB = RGB (RGB - Threshold) * (1 / (1 - Contrast / 255) - 1)
Où, lorsque le contraste est égal à 255 (RVB - Seuil) * (1 / (1 - Contraste / 255) - 1) est infini (± Puisque les valeurs maximales et minimales de RVB sont respectivement de 255 et 0, newRGB ne peut que). être déterminé par le seuil, c'est-à-dire newRGB = RGB >= Threshold? 255:0, il s'agit en fait de définir le seuil de l'image. L'image est composée de huit couleurs maximum, à savoir le rouge, le jaune, le vert, le cyan, le bleu et le violet. , noir et blanc. Il n'y a que 8 lignes maximum sur l'image en niveaux de gris.
Lorsque le Contraste est inférieur à 0 :
2) newRGB = RGB (RGB - Threshold) * Contrast / 255
Parmi eux, lorsque le Contraste est égal à -255, l'image RVB Les composantes sont toutes égales au seuil, l'image est complètement grise et il n'y a qu'une seule ligne sur l'image en niveaux de gris, qui est le seuil en niveaux de gris.
2. Réglage de la luminosité de l'image. Cet article utilise le réglage non linéaire de la luminosité le plus couramment utilisé (cette méthode de réglage de la luminosité est également utilisée dans les versions inférieures à Photoshop CS3, et les versions CS3 et supérieures conservent également l'option de cette méthode de réglage de la luminosité).
3. Algorithme de réglage complet de la luminosité/contraste de l’image. C'est très simple lorsque la luminosité et le contraste sont ajustés en même temps, si le contraste est supérieur à 0, ajustez la luminosité maintenant, puis ajustez le contraste lorsque le contraste est inférieur à 0, l'inverse est vrai, ajustez. commencez par régler le contraste, puis réglez la luminosité.
Ce qui suit est le code complet pour le réglage de la luminosité/contraste des images Photoshop écrit à l'aide de données bitmap BCB2007 et GDI, y compris un exemple de code :
//-- - ------------------------------------------------- - -----------------------
// Définir la structure des pixels ARVB
union typedef
{
Couleur ARVB;
struct
{
BYTE Bleu;
BYTE Vert;
BYTE Rouge;
BYTE Alpha;
};
}ARGBQuad, *PARGBQuad;
//------------ - ------------------------------------------------- - ----------
//------------------------------------ ---------------------------------------
FORCEINLINE
INT CheckValue(INT value)
{
return value <= 0 ? 0 : valeur >= 255 ? 255 : valeur ;
}
//---------------- -------------------------------------------------- ---------
VOID BrightAndContrast (BitmapData *données, INT luminosité, INT contraste, Seuil BYTE)
{
FLOAT cv = contraste <= -255 ? -1.0f : contraste / 255.0f;
if (contraste > 0 && contraste < 255 )
cv = 1.0f / (1.0f - cv) - 1.0f;
BYTE values[256];
pour (INT i = 0; i < 256; i )
{
INT v = contraste > 0 ? CheckValue(i bright) : i;
if (contraste >= 255)
v = v >= seuil ? 255 : 0;
else
v = CheckValue(v (INT)((v - seuil) * cv 0.5f ));
valeurs[i] = contraste < 0 ? CheckValue(v bright) : v;
}
PARGBQuad p = (PARGBQuad)data->Scan0;
INT offset = data->Stride - data->Width * sizeof(ARGBQuad);
pour (UINT y = 0; y < data->Hauteur; y , (BYTE*)p = offset)
{
pour (UINT x = 0; x < data->Width; x , p )
{
p ->Bleu = valeurs[p->Bleu];
p->Vert = valeurs[p->Vert];
p->Rouge = valeurs[p->Rouge];
}
}
}
//--------------------------------------- ------ ------------------------------------
// Verrouiller la ligne de balayage bitmap GDI sur les données
FORCEINLINE
VOID LockBitmap (Gdiplus::Bitmap *bmp, BitmapData *data)
{
Gdiplus::Rect r(0, 0, bmp->GetWidth(), bmp->GetHeight());
bmp-> ;LockBits( &r, ImageLockModeRead | ImageLockModeWrite,
PixelFormat32bppARGB, data);
}
//--------------- - ------------------------------------------------- - -------
// Déverrouillage de la ligne de balayage Bitmap GDI
FORCEINLINE
VOID UnlockBitmap (Gdiplus::Bitmap *bmp, BitmapData *data)
{
bmp->UnlockBits(data);
}
//--- - ------------------------------------------------- - ----------------------
void __fastcall TForm1::Button3Click( TObject *Sender)
{
Gdiplus::Bitmap *bmp = nouveau Gdiplus::Bitmap(L"d:\source.jpg ");
Gdiplus::Graphics *g = nouveau Gdiplus::Graphics(Canvas->Handle);
g->DrawImage(bmp, 0, 0);
Données BitmapData;
LockBitmap(bmp, &data);
BrightAndContrast(&data, 0, 100, 121);
UnlockBitmap(bmp, &data);
g->DrawImage(bmp, data.Width, 0) ;
supprimer g;
supprimer bmp;
}
//---------------- -------------------------------------------------- ---------
Dans la fonction de réglage de la luminosité/contraste BrightAndContrast, une table de recherche de 256 éléments est d'abord créée selon le principe introduit précédemment, puis les données d'image sont traitées pixel par pixel. Les données ajustées sont obtenues dans la table de recherche en fonction des valeurs des composants R, V et B, la vitesse de traitement est donc assez rapide.
Pour plus d'articles sur le réglage de la luminosité/contraste des images Photoshop, veuillez faire attention au PHP Site chinois !