Stellen Sie kurz das Prinzip der Helligkeits-/Kontrastanpassung von Photoshop-Bildern vor:
1. Formel des Kontrastalgorithmus.
Photoshop verarbeitet die Kontrasterhöhung entsprechend den positiven bzw. negativen Werten des angegebenen Werts.
Wenn newRGB zur Darstellung der neuen R-, G- und B-Komponenten des Bildpixels verwendet wird, stellt RGB die R-, G- und B-Komponenten des Bildpixels dar, Threshold ist der angegebene Schwellenwert und Contrast ist das Kontrastinkrement. Wenn der Kontrast größer als 0 ist. Wenn:
1) newRGB = RGB + (RGB - Schwellenwert) * (1 / (1 - Kontrast / 255) - 1)
Wobei , wenn der Kontrast gleich 255 (RGB - Schwellenwert) * (1 / (1 - Kontrast / 255) - 1) ist, ist er unendlich (±), da der Maximal- und Minimalwert von RGB 255 bzw. 0 beträgt, newRGB kann nur durch den Schwellenwert bestimmt werden, d. h. newRGB = RGB >= Schwellenwert ? 255: 0, dies ist tatsächlich die Einstellung des Bildschwellenwerts, nämlich Rot, Gelb, Grün, Cyan, Blau. Lila, Schwarz und Weiß. Das Graustufenbild enthält nur bis zu 8 Linien.
Wenn der Kontrast kleiner als 0 ist:
2) newRGB = RGB + (RGB - Schwellenwert) * Kontrast / 255
Darunter, wenn der Kontrast gleich -255 ist , das Bild RGB Jede Komponente entspricht dem Schwellenwert, das Bild ist vollständig grau und es gibt nur eine Linie auf dem Graustufenbild, bei der es sich um die Schwellengraustufe handelt.
2. Anpassung der Bildhelligkeit. In diesem Artikel wird die am häufigsten verwendete nichtlineare Helligkeitsanpassung verwendet (diese Methode zur Helligkeitsanpassung wird auch in Versionen unterhalb von Photoshop CS3 verwendet, und Versionen ab CS3 behalten auch die Option dieser Methode zur Helligkeitsanpassung bei).
3. Umfassender Anpassungsalgorithmus für Bildhelligkeit/Kontrast. Dies ist sehr einfach. Wenn Helligkeit und Kontrast gleichzeitig angepasst werden und der Kontrast größer als 0 ist, stellen Sie die Helligkeit jetzt ein. Wenn der Kontrast kleiner als 0 ist, ist das Gegenteil der Fall Stellen Sie zunächst den Kontrast ein und passen Sie dann die Helligkeit an.
Das Folgende ist der vollständige Code für die Helligkeits-/Kontrastanpassung von Photoshop-Bildern, geschrieben unter Verwendung von BCB2007- und GDI+-Bitmap-Daten, einschließlich Beispielcode:
//-- - ------------------------------------------------- - -----------------------
// ARGB-Pixelstruktur definieren
typedef union
{
ARGB Color;
struct
{
BYTE Blue;
BYTE Green;
BYTE Red;
BYTE Alpha;
};
}ARGBQuad, *PARGBQuad;
//------------ - ------------------------------------------------- - ----------
//------------------------------------ ---------------------------------------
FORCEINLINE
INT CheckValue(INT value)
{
return value <= 0? 0 : Wert >= 255? 255 : Wert;
}
//---------------- -------------------------------------------------- ---------
VOID BrightAndContrast(BitmapData *data, INT hell, INT kontrast, BYTE schwelle)
{
FLOAT cv = Kontrast <= -255? -1.0f : contrast / 255.0f;
if (contrast > 0 && contrast < 255 )
cv = 1.0f / (1.0f - cv) - 1.0f;
BYTE-Werte[256];
for (INT i = 0; i < 256; i ++)
{
INT v = Kontrast > 0? CheckValue(i + bright) : i;
if (contrast >= 255)
v = v >= Schwellenwert? 255 : 0;
else
v = CheckValue(v + (INT)((v - threshold) * cv + 0,5f));
values[i] = contrast < 0? CheckValue(v + bright) : v;
}
PARGBQuad p = (PARGBQuad)data->Scan0;
INT offset = data->Stride - data->Width * sizeof(ARGBQuad);
for (UINT y = 0; y < data->Height; y ++, (BYTE *)p += offset)
{
for (UINT x = 0; x < data->Width; x ++, p ++)
{
p->Blau = Werte[p->Blau];
p->Grün = Werte[p->Grün];
p- >Rot = Werte [p->Rot];
}
}
}
//----------------------------------------------------- ------ ------------------------------------
// GDI+-Bitmap-Scanline auf Daten sperren
FORCEINLINE
VOID LockBitmap(Gdiplus::Bitmap *bmp, BitmapData *data)
{
Gdiplus::Rect r(0, 0, bmp->GetWidth(), bmp->GetHeight());
bmp-> ;LockBits( &r, ImageLockModeRead | ImageLockModeWrite,
PixelFormat32bppARGB, data);
}
//--------------- - ------------------------------------------------- - -------
// GDI+ Bitmap Scanline Unlock
FORCEINLINE
VOID UnlockBitmap (Gdiplus::Bitmap *bmp, BitmapData *data)
{
bmp->UnlockBits(data);
}
//--- - ------------------------------------------------- - ----------------------
void __fastcall TForm1::Button3Click( TObject *Sender)
{
Gdiplus::Bitmap *bmp = new Gdiplus::Bitmap(L"d:\source.jpg ");
Gdiplus::Graphics *g = new Gdiplus::Graphics(Canvas->Handle);
g->DrawImage(bmp, 0, 0);
BitmapData data;
LockBitmap(bmp, &data);
BrightAndContrast(&data, 0, 100, 121);
UnlockBitmap(bmp, &data);
g->DrawImage(bmp, data.Width, 0) ;
g löschen;
bmp löschen;
}
//---------------- -------------------------------------------------- ---------
In der Helligkeits-/Kontrast-Anpassungsfunktion BrightAndContrast wird zunächst eine Nachschlagetabelle mit 256 Elementen nach dem zuvor vorgestellten Prinzip erstellt und anschließend die Bilddaten verarbeitet Pixel für Pixel werden die angepassten Daten entsprechend den R-, G- und B-Komponentenwerten abgerufen, sodass die Verarbeitungsgeschwindigkeit recht hoch ist.
Weitere Artikel zur Helligkeits-/Kontrastanpassung von Photoshop-Bildern finden Sie im PHP Chinesische Website!