读取一张bmp或jpg图片,读取RGB值,然后把R值用B值替换,B值用R值代换,保存到另一张图片中,可以实现吗?

解决方案 »

  1.   

    更改RGB可以用bitblt函数来实现。
      

  2.   

    用PICTURE控件加载图片,然后逐个象素读取颜色值,然后替换颜色,再将替换好颜色的象素画回原来的位置
    读取颜色用Point方法,画点用PSET方法:
    Point 方法
          按照长整数,返回在 Form 或 PictureBox 上所指定磅的红-绿-蓝 (RGB) 颜色。不支持命名参数。语法object.Point(x, y)Point 方法的语法包含下列部分:部分 描述 
    object 可选的。一个对象表达式,其值为“应用于”列表中的一个对象。如果省略 object,带有焦点的 Form 象缺省为 object. 
    x, y 必需的。均为单精度值,指示 Form 或 PictureBox 的 ScaleMode 属性中该点的水平(x-轴)和垂直(y-轴)坐标。必须用括号包括这些值。 
    说明如果由 x 和 y 坐标所引用的点位于 object 之外,Point 方法将返回 -1。PSet 方法
          将对象上的点设置为指定颜色。语法object.PSet [Step] (x, y), [color]PSet 方法的语法有如下对象限定符和部分:部分 描述 
    object 可选的。 对象表达式,其值为“应用于”列表中的对象。如果object 省略,具有焦点的窗体作为object。 
    Step 可选的。关键字,指定相对于由 CurrentX 和 CurrentY 属性提供的当前图形位置的坐标。 
    (x, y) 必需的。 Single (单精度浮点数),被设置点的水平( x 轴)和垂直( y 轴)坐标。 
    color 可选的。Long (长整型数),为该点指定的 RGB 颜色。如果它被省略,则使用当前的 ForeColor 属性值。可用 RGB 函数或 QBColor 函数指定颜色。 
    说明所画点的尺寸取决于 DrawWidth 属性值。当 DrawWidth 为 1,PSet 将一个像素的点设置为指定颜色。当 DrawWidth 大于 1,则点的中心位于指定坐标。画点的方法取决于 DrawMode 和 DrawStyle 属性值。执行 PSet 时,CurrentX 和 CurrentY 属性被设置为参数指定的点。想用 PSet 方法清除单一像素,规定该像素的坐标,并用 BackColor 属性设置作为 color 参数。
      

  3.   

    保存图片,用SAVEPICTURE方法。
      

  4.   

    程序大体流程:
    sub FORM_LOAD
    PICTURE1.BORDERSTYLE=0 '设置为无边框,否则图像大小有差异
    PICTURE1.SCALEMODE=3 '设置为PIXEL单位
    PICTURE1.AUTOREDRAW=TRUE '该属性必须为TRUE,否则无法保存
    end subSUB COMMAND1_CLICK()
    DIM X AS LONG 
    DIM Y AS LONG 
    DIM COLOR AS LONG 
    DIM RED AS LONG 
    DIM GREEN AS LONG 
    DIM BLUE AS LONG 
    FOR X=0 TO PICTURE1.SCALEWIDTH
    FOR Y=0 TO PICTURE1.SCALEHEIGH
       COLOR= PICTURE1.POINT(X,Y)
       RED=COLOR MOD 256
       GREEN= (COLOR\256) MOD 256
       BLUE=(COLOR\65536) MOD 256
       PICTURE1.PSET (X,Y), RGB(B,G,R) '该函数根据R,G,B生成一个24位颜色值,参数正常顺序为 RGB( RED,GREEN, BLUE)这里交换一下位置就做到楼主要求可以了。
    NEXT
    NEXT
    PICTURE1.REFRESH
    SAVEPICTURE PICTURE1.IMAGE, "c:\TEST.BMP"
    END SUB
    窗体上添加一个PICTURE控件和一个COMMAND控件,代码如上,随手写的,没有调试过,有问题的话自己调试下
      

  5.   

    辛苦了,已经调试完成
    就这句要改一下,PICTURE1.PSET (X,Y), RGB(B,G,R)