CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

图像翻转的问题(高手请看看,我困惑ing)

楼主chenyanlin(陈延林)2005-11-03 11:31:47 在 VB / 基础类 提问

1)在窗体中添加2个picturebox控件,picture1做主容器,picture2做图像处理缓冲器,高手能帮我解析一下这个原理嘛  
  2)我在书上抄了一段代码,可是并没有出现书上所说的图像翻转。   代码是这样的:  
  Private   Sub   MENU_IMAGE_FLIPH_Click()  
  Dim   X,   Y,   c  
  Picture2.Cls  
  Picture2.Picture   =   Picture1.Picture  
  Screen.MousePointer   =   11   '将鼠标光标设为等待图像  
  For   Y   =   0   To   Picture1.ScaleHeight   -   1  
        For   X   =   0   To   Picture1.ScaleWidth   -   1  
              '水平翻转  
              c   =   Picture2.Point(Picture1.ScaleWidth   -   1   -   X,   Y)   '取出对应点的rgb值  
              Picture1.PSet   (X,   Y),   c  
              DoEvents  
              Next   X  
  Next   Y  
  Screen.MousePointer   =   0   '   恢复鼠标指针  
  End   Sub  
  图像并没有水平翻转,而是很慢的速度扫描图像,图像变的看不清楚了  
  请问高手这个是怎么回事呢??? 问题点数:20、回复次数:12Top

1 楼fxy_2002(阿勇)回复于 2005-11-03 11:37:57 得分 0

用   Point   处理图象翻转,也就是理论上可行。实际上太慢了,没意义。  
   
  以上代码对   x,y   的坐标值没作翻转,图象当然也没有翻转。实际上是一段图象复制代码。Top

2 楼Summer006(脸都丢尽了!闭关修练。。。。)回复于 2005-11-03 11:45:11 得分 0

For   Y   =   0   To   Picture1.ScaleHeight   -   1  
        For   X   =   0   To   Picture1.ScaleWidth   -   1  
              '水平翻转  
              c   =   Picture2.Point(Picture2.ScaleWidth   -   1   -   X,   Y)  
              Picture1.PSet   (X,   Y),   c  
               
              DoEvents  
              Next   X  
  Next   Y  
  要把picture1   和2   的scalemode改为3-pixels。Top

3 楼Summer006(脸都丢尽了!闭关修练。。。。)回复于 2005-11-03 11:47:00 得分 0

用   Point   处理图象翻转,也就是理论上可行。实际上太慢了,没意义。  
  ========  
  说得是,这类教程没有实用价值,只是让初学者容易理解而已。Top

4 楼chenyanlin(陈延林)回复于 2005-11-03 11:54:22 得分 0

请高手给出更加高明的策略,让小弟知道山外有这么多高山    
  Top

5 楼900126(息夫人)回复于 2005-11-03 11:57:24 得分 0

Picture2.Width   =   Picture1.Width  
  Picture2.Height   =   Picture1.Height  
  For   i   =   0   To   1000   Step   15  
  For   j   =   0   To   1000   Step   15  
  s   =   Picture1.Point(i,   j)  
  Picture2.PSet   (Picture1.Width   -   i,   j),   s  
  Next   j  
  Next   i  
  Top

6 楼900126(息夫人)回复于 2005-11-03 12:00:22 得分 0

或者:  
  Picture2.Width   =   Picture1.Width  
  Picture2.Height   =   Picture1.Height  
  For   i   =   0   To   Picture1.Width   Step   15  
  For   j   =   0   To   Picture1.Height   Step   15  
  s   =   Picture1.Point(i,   j)  
  Picture2.PSet   (Picture1.Width   -   i,   j),   s  
  Next   j  
  Next   iTop

7 楼900126(息夫人)回复于 2005-11-03 12:01:22 得分 0

关键是里面的   step   15   ,会大大提高速度,不会影响质量。Top

8 楼northwolves(狼行天下)回复于 2005-11-03 13:20:04 得分 0

我以前写过类似代码,供你参考一下(http://dev.csdn.net/develop/article/37/37831.shtm)  
   
   
  Private   Declare   Function   StretchBlt   Lib   "gdi32"   (ByVal   hdc   As   Long,   ByVal   X   As   Long,   ByVal   Y   As   Long,   ByVal   nWidth   As   Long,   ByVal   nHeight   As   Long,   ByVal   hSrcDC   As   Long,   ByVal   xSrc   As   Long,   ByVal   ySrc   As   Long,   ByVal   nSrcWidth   As   Long,   ByVal   nSrcHeight   As   Long,   ByVal   dwRop   As   Long)   As   Long  
  Private   Const   SRCCOPY   =   &HCC0020  
  Private   WithEvents   pic1   As   PictureBox  
  Private   WithEvents   pic2   As   PictureBox  
   
   
  Sub   Form_Load()  
  Me.Move   0,   0,   10200,   4000  
  Set   pic1   =   Controls.Add("vb.picturebox",   "pic1",   Me)  
  pic1.Visible   =   True  
  pic1.Move   0,   0,   5000,   2500  
  Set   pic2   =   Controls.Add("vb.picturebox",   "pic2",   Me)  
  pic2.Visible   =   True  
  pic2.Move   5000,   0,   5000,   2500  
  pic1.ScaleMode   =   3  
  pic2.ScaleMode   =   3  
  End   Sub  
   
   
  Sub   Form_Click()  
  pic2.CurrentX   =   0  
  pic2.CurrentY   =   0  
  pic2.FontSize   =   120  
  pic2.ForeColor   =   vbRed  
  pic2.FontName   =   "隶书"  
  pic2.Print   "镜像"  
  StretchBlt   pic1.hdc,   pic2.ScaleWidth,   0,   -pic2.ScaleWidth,   pic2.ScaleHeight,   pic2.hdc,   0,   0,   pic2.ScaleWidth,   pic2.ScaleHeight,   SRCCOPY  
  End   Sub  
   
  Top

9 楼songyaowu(不以分多而蹭之;不因分少而不答; www.vb99.com)回复于 2005-11-03 13:34:46 得分 0

如果只想翻转图像,问题没那么复杂。只一条语句足够。  
  picture1中有一幅图像,将两个图片框的大小设置为相同:  
   
  Private   Sub   Command1_Click()  
  '   垂直翻转  
  Picture2.PaintPicture   Picture1.Picture,   0,   Picture1.ScaleHeight,   Picture1.ScaleWidth,   -Picture1.ScaleHeight,   0,   0,   Picture1.ScaleWidth,   Picture1.ScaleHeight  
  End   Sub  
   
  Private   Sub   Command2_Click()  
  '   水平翻转  
  Picture2.PaintPicture   Picture1.Picture,   Picture2.ScaleWidth,   0,   -Picture1.ScaleWidth,   Picture1.ScaleHeight,   0,   0,   Picture1.ScaleWidth,   Picture1.ScaleHeight  
  End   Sub  
  Top

10 楼WallesCai(女人之美,在于蠢得无怨无悔,男人之美,在于撒谎撒得白日见鬼)回复于 2005-11-03 13:41:11 得分 0

因为书上用的是PICTURE控件的取点和画点方法,所以速度非常慢,才会变成扫描样。  
  其实快速翻转图片应该用PICTURE控件的PAINTPICTURE方法。  
  写个例程给你看一下就明白了:  
  新建工程,添加两个PICTURE和COMMAND按钮。  
   
  Option   Explicit  
   
  Private   Sub   Form_Load()  
  Me.ScaleMode   =   3  
  Command1.Caption   =   "水平"  
  Command2.Caption   =   "垂直"  
  Picture1.ScaleMode   =   3       '单位为像素  
  Picture2.ScaleMode   =   3  
  Picture2.Picture   =   LoadPicture("c:\test.jpg")   '加载一个图片,可以改成你的文件  
  End   Sub  
   
   
  Private   Sub   Command1_Click()  
  Picture1.PaintPicture   Picture2.Picture,   Picture1.Width,   0,   -Picture1.Width  
  End   Sub  
   
  Private   Sub   Command2_Click()  
  Picture1.PaintPicture   Picture2.Picture,   0,   Picture1.Height,   Picture1.Width,   -Picture1.Height  
  End   Sub  
   
  运行一下就知道了Top

11 楼chenyanlin(陈延林)回复于 2005-11-03 14:07:47 得分 0

to     northwolves(狼行天下)   :  
  为什么StretchBlt这个函数没有定义呢??     模块里面加了这个函数了呀!!!  
  在运行时候说StretchBlt函数没有定义  
  Top

12 楼zhangjinzhicn(依米)回复于 2005-11-03 14:33:16 得分 0

www.wave12.com   的图片组件支持任意角度旋转Top

相关问题

  • 如何bmp图像翻转
  • bmp图像翻转问题
  • 咋样对图像翻转,如翻转90度
  • 怎样实现图像的镜像翻转?
  • 如何实现图像翻转和旋转
  • 急问简单的图像翻转及拖动
  • 取整的问题,困惑ING
  • 困惑......困惑......
  • 困惑ing,关于如何学好java.请高手进入
  • 急急急急急急!!!!VB的图像翻转和缩放能否同时处理??和保存??请求帮助

关键词

  • 图像
  • 代码
  • 函数
  • 控件
  • picture
  • 翻转
  • pic
  • scalewidth
  • paintpicture
  • scalemode

得分解答快速导航

  • 帖主:chenyanlin

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo