上述问题的解决方案在 vb 2005 中不起作用
我需要vb2005中的解决方案
这是下面的c#代码
公共静态位图调整对比度(位图图像,浮点值)
{
Value = (100.0f + Value) / 100.0f;
Value *= Value;
Bitmap NewBitmap = (Bitmap)Image.Clone();
BitmapData data = NewBitmap.LockBits(
new Rectangle(0, 0, NewBitmap.Width, NewBitmap.Height),
ImageLockMode.ReadWrite,
NewBitmap.PixelFormat);
unsafe
{
for (int y = 0; y < NewBitmap.Height; ++y)
{
byte* row = (byte*)data.Scan0 + (y * data.Stride);
int columnOffset = 0;
for (int x = 0; x < NewBitmap.Width; ++x)
{
byte B = row[columnOffset];
byte G = row[columnOffset + 1];
byte R = row[columnOffset + 2];
float Red = R / 255.0f;
float Green = G / 255.0f;
float Blue = B / 255.0f;
Red = (((Red - 0.5f) * Value) + 0.5f) * 255.0f;
Green = (((Green - 0.5f) * Value) + 0.5f) * 255.0f;
Blue = (((Blue - 0.5f) * Value) + 0.5f) * 255.0f;
int iR = (int)Red;
iR = iR > 255 ? 255 : iR;
iR = iR < 0 ? 0 : iR;
int iG = (int)Green;
iG = iG > 255 ? 255 : iG;
iG = iG < 0 ? 0 : iG;
int iB = (int)Blue;
iB = iB > 255 ? 255 : iB;
iB = iB < 0 ? 0 : iB;
row[columnOffset] = (byte)iB;
row[columnOffset + 1] = (byte)iG;
row[columnOffset + 2] = (byte)iR;
columnOffset += 4;
}
}
}
NewBitmap.UnlockBits(data);
return NewBitmap;
}
&这里是vb2005代码
公共共享函数 AdjustContrast(Image As Bitmap, Value As Single) As Bitmap
Value = (100F + Value) / 100F
Value *= Value
Dim NewBitmap As Bitmap = DirectCast(Image.Clone(), Bitmap)
Dim data As BitmapData = NewBitmap.LockBits(New Rectangle(0, 0, NewBitmap.Width, NewBitmap.Height), ImageLockMode.ReadWrite, NewBitmap.PixelFormat)
For y As Integer = 0 To NewBitmap.Height - 1
Dim row As Pointer(Of Byte) = CType(data.Scan0, Pointer(Of Byte)) + (y * data.Stride)
Dim columnOffset As Integer = 0
For x As Integer = 0 To NewBitmap.Width - 1
Dim B As Byte = row(columnOffset)
Dim G As Byte = row(columnOffset + 1)
Dim R As Byte = row(columnOffset + 2)
Dim Red As Single = R / 255F
Dim Green As Single = G / 255F
Dim Blue As Single = B / 255F
Red = (((Red - 0.5F) * Value) + 0.5F) * 255F
Green = (((Green - 0.5F) * Value) + 0.5F) * 255F
Blue = (((Blue - 0.5F) * Value) + 0.5F) * 255F
Dim iR As Integer = CInt(Red)
iR = If(iR > 255, 255, iR)
iR = If(iR < 0, 0, iR)
Dim iG As Integer = CInt(Green)
iG = If(iG > 255, 255, iG)
iG = If(iG < 0, 0, iG)
Dim iB As Integer = CInt(Blue)
iB = If(iB > 255, 255, iB)
iB = If(iB < 0, 0, iB)
row(columnOffset) = CByte(iB)
row(columnOffset + 1) = CByte(iG)
row(columnOffset + 2) = CByte(iR)
columnOffset += 4
Next
Next
NewBitmap.UnlockBits(data)
Return NewBitmap
结束功能
暗行作为指针(字节)= CType(数据.Scan0,指针(字节))+(y * data.Stride)
上面的行给出了错误,因为 vb 不支持
暗淡的行作为指针(字节)