zoukankan      html  css  js  c++  java
  • .net 处理图片亮度

    在网上搜索到一段代码,其中需要unsafe模式使用指针移动来操作修改图片数据!

    重新修改使用Marshal类来替换处理unsafe代码段,代码如下 c++/cli,C#的直接按照语法修改下就可以了!

    Bitmap^ UpdateImageLight(Bitmap^ bmp,int degree)
        {
            
    if(bmp==nullptr)
                
    return nullptr;
            
    if(degree<-255
                degree
    =-255;
            
    if (degree>255
                degree
    =255;
            
    try{
                Rectangle rect 
    = Rectangle(0,0,bmp->Width,bmp->Height);
                BitmapData
    ^ bmpData = bmp->LockBits( rect, ImageLockMode::ReadWrite,PixelFormat::Format24bppRgb);//24位rgb模式,一个像素点有3 byte数据
                IntPtr ptr = bmpData->Scan0; //bmpData数据段首地址
                int bytes = bmpData->Stride * bmp->Height;
                array
    <Byte>^rgbValues = gcnew array<Byte>(bytes);
                System::Runtime::InteropServices::Marshal::Copy( ptr, rgbValues, 
    0, bytes ); //复制ptr指针开始的 bytes大小数据到 rgbValue
                int offset = bmpData->Stride - bmp->Width * 3;
                
    int k = 0,pix=0;
                
    for (int y = 0; y < bmp->Height; y++)
                {
                    
    for (int x = 0; x < bmp->Width; x++)
                    {
                        
    // 处理指定位置像素的亮度
                        for (int i = 0; i < 3; i++)
                        {
                            pix 
    = rgbValues[k+i] + degree;
                            
    if (degree < 0) rgbValues[k+i] = (Byte)Math::Max(0, pix);
                            
    if (degree > 0) rgbValues[k+i] = (Byte)Math::Min(255, pix);
                        }
                        k 
    += 3
                    }
                    k 
    += offset;
                }
                System::Runtime::InteropServices::Marshal::Copy( rgbValues, 
    0, ptr, bytes );//处理过的数据复制回原地址
                bmp->UnlockBits(bmpData);
                
    return bmp;
            }
            
    catch(Exception^ ex)
            {
                
    return nullptr;
            }
        }
  • 相关阅读:
    Tomcat7修改根路径应用
    Linux 双网卡绑定
    nginx 动态黑名单
    LINUX 字体查看 字体更改mkfontdir
    iptables 有关计算机名解析问题
    godaddy SSL证书不信任
    要远程登录,你需要具有通过远程桌面服务进行登录的权限...
    如何用jQuery获得select的值
    jQuery 选中tr下面的第某个td
    c#中char、string转换为十六进制byte的浅析
  • 原文地址:https://www.cnblogs.com/cxwx/p/1791722.html
Copyright © 2011-2022 走看看