用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 参数。
保存图片,用SAVEPICTURE方法。
程序大体流程: 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控件,代码如上,随手写的,没有调试过,有问题的话自己调试下
读取颜色用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 参数。
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控件,代码如上,随手写的,没有调试过,有问题的话自己调试下
就这句要改一下,PICTURE1.PSET (X,Y), RGB(B,G,R)