5271|14

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

!!!急救---evc下位图的操作,包括旋转90,180°,还有颜色调节等等! [复制链接]

最近在做一个画图的程序,遇到位图旋转这个问题,现在解决不了拉,哪位大虾有旋转的好方法啊?有源码更好啊?
还有就是位图的颜色调节,反色、色阶调节等。
谁做过近似的程序啊,请赐教啊?感激啊!
我邮箱:
htysyyc@126.com,一起讨论啊!

最新回复

huangtaoyuan (无所不能) :能不能把旋转的源码公开一下哈.我做的旋转,速度太慢了.多谢了呵  详情 回复 发表于 2007-8-15 15:21
点赞 关注

回复
举报

82

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
找资料噻,要讨论没有几个星期也说不清了。
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
前一段时间做过一个操作图片的旋转等的程序。参考源代码是在网上找的,不能提供。因为是公司的。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
色阶调节没做过,其他的都不是很难,找本图像编程方面的书,基本上都有
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
我也在做,在网上找了好多资料,实验都没通过。哎!哪位高手有办法啊?
你解决了高手我啊。
共享!共享!共享!共享!共享!
我发现eeworld的高手越来越少了,还是。。。
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

6
 
不能提供还有没有别的办法吗?把你参考代码可以提供吧?给点提示啊
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

7
 
旋转已解决,调整正在进行中………………
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
--!这些都比较简单的,源码到处都是,记得有本书,配套源码很详细
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

9
 
楼上的大侠,简单给点资料啊,我现在在做颜色条件了,色阶、亮度、对比度等。
要分就给点实际的东西哦。别总说简单就没了
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 
这些问题实在是太简单了,而且已经提示你去找配套源码了,分对我们来说已经没有意义了。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

11
 
楼上的大侠啊,问题是很简单,找源码谁都会啊。你真正了解位图颜色处理的原理吗?
比如颜色调节,对比度和亮度等,是针对位图什么进行调节的?我就想知道原理。请指教啊 。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

12
 
问题搞定!结贴拉!
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

13
 
BOOL AdjustDIBColor(HDIB hDib, int nColorModel, int v1, int v2, int v3)
{
        BYTE r, g, b, c, m, y, k;
        int  dr, dg, db, dc, dm, dy;
        double dh, ds, dv, dl, h, s, v, l;

        if (hDib == NULL)
                return FALSE;
        BITMAPINFO *bmi = (BITMAPINFO *)GlobalLock(hDib);
        if (! bmi)
                return FALSE;

        WaitCursorBegin();

        switch (nColorModel)
        {
        case RGB_COLOR:
                dr = v1;
                dg = v2;
                db = v3;
                break;
        case CMYK_COLOR:
                dc = v1;
                dm = v2;
                dy = v3;
                break;
        case HSI_COLOR:
                if (v1 < 0)
                        v1 += 360;
                dh = v1;
                ds = v2;
                dv = v3;
                break;
        case HLS_COLOR:
                if (v1 < 0)
                        v1 += 360;
                dh = v1;
                dl = v2/100.0;
                ds = v3/100.0;
                break;
        }

        // get color number
        WORD wNumColors = DIBNumColors((LPBYTE)bmi);

        if (wNumColors)                // There is palette
        {
                WORD i;
                switch (nColorModel)
                {
                        case RGB_COLOR:
                                for (i=0; i                                 {
                                        bmi->bmiColors.rgbRed = BOUND(bmi->bmiColors.rgbRed+dr, 0, 255);
                                        bmi->bmiColors.rgbGreen = BOUND(bmi->bmiColors.rgbGreen+dg, 0, 255);
                                        bmi->bmiColors.rgbBlue  = BOUND(bmi->bmiColors.rgbBlue+db, 0, 255);
                                }
                                break;
                        case CMYK_COLOR:
                                for (i=0; i                                 {
                                        r = bmi->bmiColors.rgbRed;
                                        g = bmi->bmiColors.rgbGreen;
                                        b = bmi->bmiColors.rgbBlue;
                                        RGBtoCMYK(r, g, b, &c, &m, &y, &k);
                                        c += dc;
                                        m += dm;
                                        y += dy;
                                        CMYKtoRGB(c, m, y, k, &r, &g, &b);
                                        bmi->bmiColors.rgbRed   = r;
                                        bmi->bmiColors.rgbGreen = g;
                                        bmi->bmiColors.rgbBlue  = b;
                                }
                                break;
                        case HSI_COLOR:
                                for (i=0; i                                 {
                                        r = bmi->bmiColors.rgbRed;
                                        g = bmi->bmiColors.rgbGreen;
                                        b = bmi->bmiColors.rgbBlue;
                                        RGBtoHSI(r, g, b, &h, &s, &v);
                                        h += dh;
                                        s += ds;
                                        v += dv;
                                        HSItoRGB(h, s, v, &r, &g, &b);
                                        bmi->bmiColors.rgbRed   = r;
                                        bmi->bmiColors.rgbGreen = g;
                                        bmi->bmiColors.rgbBlue  = b;
                                }
                                break;
                        case HLS_COLOR:
                                for (i=0; i                                 {
                                        r = bmi->bmiColors.rgbRed;
                                        g = bmi->bmiColors.rgbGreen;
                                        b = bmi->bmiColors.rgbBlue;
                                        RGBtoHLS(r, g, b, &h, &l, &s);
                                        if (h != UNDEFINED)
                                                h = BOUND(h+dh, 0.0, 360.0);
                                        l = BOUND(l+dl, 0.0, 1.0);
                                        s = BOUND(s+ds, 0.0, 1.0);
                                        HLStoRGB(h, l, s, &r, &g, &b);
                                        bmi->bmiColors.rgbRed   = r;
                                        bmi->bmiColors.rgbGreen = g;
                                        bmi->bmiColors.rgbBlue  = b;
                                }
                                break;
                }
        }
        else                // No palette
        {
                // bits position
                LPBITMAPINFOHEADER lpbi = (LPBITMAPINFOHEADER)bmi;
                LPBYTE lpBits = (LPBYTE)lpbi + lpbi->biSize;
                int nDelta = WIDTHBYTES(lpbi->biBitCount*lpbi->biWidth) - lpbi->biWidth*lpbi->biBitCount/8;
                int nx, ny;
                switch (nColorModel)
                {
                        case RGB_COLOR:
                                for (ny=0; nybiHeight; ny++)
                                {
                                        for (nx=0; nxbiWidth; nx++)
                                        {
                                                b = (BYTE)*(lpBits);
                                                g = (BYTE)*(lpBits+1);
                                                r = (BYTE)*(lpBits+2);
                                                *lpBits++ = BOUND(b+db, 0, 255);
                                                *lpBits++ = BOUND(g+dg, 0, 255);
                                                *lpBits++ = BOUND(r+dr, 0, 255);
                                        }
                                        lpBits += nDelta;
                                }
                                break;
                        case CMYK_COLOR:
                                for (ny=0; nybiHeight; ny++)
                                {
                                        for (nx=0; nxbiWidth; nx++)
                                        {
                                                b = (BYTE)*(lpBits);
                                                g = (BYTE)*(lpBits+1);
                                                r = (BYTE)*(lpBits+2);
                                                RGBtoCMYK(r, g, b, &c, &m, &y, &k);
                                                c += dc;
                                                m += dm;
                                                y += dy;
                                                CMYKtoRGB(c, m, y, k, &r, &g, &b);
                                                *lpBits++ = b;
                                                *lpBits++ = g;
                                                *lpBits++ = r;
                                        }
                                        lpBits += nDelta;
                                }
                                break;
                        case HSI_COLOR:
                                for (ny=0; nybiHeight; ny++)
                                {
                                        for (nx=0; nxbiWidth; nx++)
                                        {
                                                b = (BYTE)*(lpBits);
                                                g = (BYTE)*(lpBits+1);
                                                r = (BYTE)*(lpBits+2);
                                                RGBtoHSI(r, g, b, &h, &s, &v);
                                                h += dh;
                                                s += ds;
                                                v += dv;
                                                HSItoRGB(h, s, v, &r, &g, &b);
                                                *lpBits++ = b;
                                                *lpBits++ = g;
                                                *lpBits++ = r;
                                        }
                                        lpBits += nDelta;
                                }
                                break;
                        case HLS_COLOR:
                                for (ny=0; nybiHeight; ny++)
                                {
                                        for (nx=0; nxbiWidth; nx++)
                                        {
                                                b = (BYTE)*(lpBits);
                                                g = (BYTE)*(lpBits+1);
                                                r = (BYTE)*(lpBits+2);
                                                RGBtoHLS(r, g, b, &h, &l, &s);
                                                if (h != UNDEFINED)
                                                        h = BOUND(h+dh, 0.0, 360.0);
                                                l = BOUND(l+dl, 0.0, 1.0);
                                                s = BOUND(s+ds, 0.0, 1.0);
                                                HLStoRGB(h, l, s, &r, &g, &b);
                                                *lpBits++ = b;
                                                *lpBits++ = g;
                                                *lpBits++ = r;
                                        }
                                        lpBits += nDelta;
                                }
                                break;
                }
        }

        GlobalUnlock(hDib);
        WaitCursorEnd();
        return TRUE;
}

BOOL AdjustDIBBrightness(HDIB hDib, int v)
{
        if (hDib == NULL)
                return FALSE;
        BITMAPINFO *bmi = (BITMAPINFO *)GlobalLock(hDib);
        if (! bmi)
                return FALSE;

        WaitCursorBegin();

        // get color number
        WORD wNumColors = DIBNumColors((LPBYTE)bmi);

        if (wNumColors)                // There is palette
        {
                for (WORD i=0; i                 {
                        ChangeBrightness(v,
                                                         &(bmi->bmiColors.rgbRed),
                                                         &(bmi->bmiColors.rgbGreen),
                                                         &(bmi->bmiColors.rgbBlue));
                }
        }
        else                // No palette
        {
                // bits position
                LPBITMAPINFOHEADER lpbi = (LPBITMAPINFOHEADER)bmi;
                LPBYTE lpBits = (LPBYTE)lpbi + lpbi->biSize;
                int nDelta = WIDTHBYTES(lpbi->biBitCount*lpbi->biWidth) - lpbi->biWidth*lpbi->biBitCount/8;
                BYTE r, g, b;
                for (int ny=0; nybiHeight; ny++)
                {
                        for (int nx=0; nxbiWidth; nx++)
                        {
                                b = (BYTE)*(lpBits);
                                g = (BYTE)*(lpBits+1);
                                r = (BYTE)*(lpBits+2);
                                ChangeBrightness(v, &r, &g, &b);
                                *lpBits++ = b;
                                *lpBits++ = g;
                                *lpBits++ = r;
                        }
                        lpBits += nDelta;
                }
        }

        GlobalUnlock(hDib);
        WaitCursorEnd();
        return TRUE;
}

BOOL AdjustDIBContrast(HDIB hDib, int v)
{
        if (hDib == NULL)
                return FALSE;
        BITMAPINFO *bmi = (BITMAPINFO *)GlobalLock(hDib);
        if (! bmi)
                return FALSE;

        WaitCursorBegin();

        // get color number
        WORD wNumColors = DIBNumColors((LPBYTE)bmi);

        if (wNumColors)                // There is palette
        {
                for (WORD i=0; i                 {
                        ChangeContrast(v,
                                                   &(bmi->bmiColors.rgbRed),
                                                   &(bmi->bmiColors.rgbGreen),
                                                   &(bmi->bmiColors.rgbBlue));
                }
        }
        else                // No palette
        {
                // bits position
                LPBITMAPINFOHEADER lpbi = (LPBITMAPINFOHEADER)bmi;
                LPBYTE lpBits = (LPBYTE)lpbi + lpbi->biSize;
                int nDelta = WIDTHBYTES(lpbi->biBitCount*lpbi->biWidth) - lpbi->biWidth*lpbi->biBitCount/8;
                BYTE r, g, b;
                for (int ny=0; nybiHeight; ny++)
                {
                        for (int nx=0; nxbiWidth; nx++)
                        {
                                b = (BYTE)*(lpBits);
                                g = (BYTE)*(lpBits+1);
                                r = (BYTE)*(lpBits+2);
                                ChangeContrast(v, &r, &g, &b);
                                *lpBits++ = b;
                                *lpBits++ = g;
                                *lpBits++ = r;
                        }
                        lpBits += nDelta;
                }
        }

        GlobalUnlock(hDib);
        WaitCursorEnd();
        return TRUE;
}
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

14
 
你找到源码就知道原理,你既然不知道又不去找源码,你以为原理是空想出来的?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

15
 
huangtaoyuan (无所不能) :能不能把旋转的源码公开一下哈.我做的旋转,速度太慢了.多谢了呵
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表