实现一图片显示,原比例显示图片,大于控件大小可用鼠标拖动浏览

Powertion 2010-03-02 04:13:40
实现一图片显示,原比例显示图片,大于控件大小可用鼠标拖动及滚动条浏览
...全文
223 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingy1 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 sun1976 的回复:]
直接自定义custom visual,属性里scroll把横向纵向都钩上,再在上面左上角扔一个图片控件即可。保存为用户对象往窗口上放
[/Quote]
学习了,用下来发现图片很大的话滚动条滚不到头,图片控件尺寸再大也没用。
chennavy 2010-03-25
  • 打赏
  • 举报
回复
谢谢楼上的,学习了2010年3月25日 22时12分50秒
sun1976 2010-03-24
  • 打赏
  • 举报
回复
直接自定义custom visual,属性里scroll把横向纵向都钩上,再在上面左上角扔一个图片控件即可。保存为用户对象往窗口上放
sun1976 2010-03-24
  • 打赏
  • 举报
回复
搞错了,好像pb没这种现成带滚动条的容器控件。
sun1976 2010-03-24
  • 打赏
  • 举报
回复
没做过,想着很简单,楼主试试:先放个容器控件例如tabpage什么的,带上滚动条
然后在里面放个图片控件以原始尺寸显示图片
当图片大于容器控件时容器控件就出现滚动条了
pb_tjb 2010-03-24
  • 打赏
  • 举报
回复
先頂一下.
永生天地 2010-03-03
  • 打赏
  • 举报
回复
//====================================================================
// 函数: of_getpicturesize() pb11.5
//--------------------------------------------------------------------
// 描述: 获得图片文件的图像尺寸大小(支持GIF,JPG,BMP,PNG格式)
//--------------------------------------------------------------------
// 参数:
// value string as_FileName 图片文件名称
// reference long al_PictureWidth 返回图片宽度
// reference long al_PictureHeight 返回图片高度
//--------------------------------------------------------------------
// 返回值: integer 1 - 成功,0 - 失败
//--------------------------------------------------------------------


Integer li_File, li_DataRead
Blob lb_Data
Long ll_FileLength,ll_PictureWidth,ll_PictureHeight
Long ll_DataLen,ll_DataPos,ll_FilePos
Boolean lb_LoopFlag = True
Char lc_Char1,lc_Char2

//文件不存在
If Not FileExists(as_FileName) Then Return 0

//取文件大小
ll_FileLength = FileLength(as_FileName)

//打开文件
li_File = FileOpen(as_FileName,StreamMode!)
If li_File = -1 Then Return 0

//读取文件
li_DataRead = FileRead(li_File,lb_Data)
If li_DataRead <= 0 Then
FileClose(li_File)
Return 0
End If


//Int li_rtn
//Byte lb_byte
////myBlob = Blob (sle_1.text, EncodingUTF8!)
//li_rtn = GetByte(lb_Data, 18, lb_byte)
//

Byte ly_byte[]
ly_byte[] = GetByteArray(lb_Data)
//messagebox("getbyte", string(lb_byte))


// GIF目前主要有两种类型
// 1. 标识为GIF87a, 只是用来存储单幅静止图像
// 2. 标识为GIF89a, 可以同时存储若干幅静止图像并进而形成连续的动画
// 文件的前 6 个字节为标识:GIF87a 或 GIF89a, 第 7,8 字节为图像宽度(width),
// 第 9,10 字节为图像高度(height), 注意两个字节中低位在前

// GIF 文件格式判断
If String(BlobMid(lb_Data,1,4),EncodingANSI!) = 'GIF8' Then
ll_PictureWidth= ly_byte[7]+ly_byte[8]*256
ll_PictureHeight= ly_byte[9]+ly_byte[10]*256

End If

// JPEG文件格式
// 前 3 个字节为标识: 0xFF,0xD8,0xFF
If ly_byte[1] = 255 and ly_byte[2] = 216 and ly_byte[3] = 255 Then
ll_DataLen = Len(lb_Data)
ll_DataPos = 3
ll_FilePos = 3
Do While lb_LoopFlag
ll_DataPos = ll_DataPos + 1
ll_FilePos = ll_FilePos + 1
If ly_byte[ll_DataPos] = 255 And ly_byte[ll_DataPos + 1] <> 255 Then
If ly_byte[ll_DataPos + 1] >= 192 And ly_byte[ll_DataPos + 1] <= 195 Then
//找到尺寸数据
ll_PictureWidth = ly_byte[ll_DataPos + 7] * 256 + ly_byte[ll_DataPos + 8]
ll_PictureHeight = ly_byte[ll_DataPos + 5] * 256 + ly_byte[ll_DataPos + 6]
lb_LoopFlag = False
Else
//没有找到尺寸数据,重新读取文件
ll_FilePos = ll_FilePos + ly_byte[ll_DataPos + 3] * 256 + ly_byte[ll_DataPos + 2] + 1
If ll_FilePos > ll_FileLength Then
FileClose(li_File)
Return 0
Else
FileSeek(li_File,ll_FilePos)
FileRead(li_File,lb_Data)
ll_DataLen = Len(lb_Data)
ll_DataPos = 0
End If
End If
End If
If ll_DataPos = ll_DataLen - 9 And lb_LoopFlag = True Then
ll_FilePos = ll_FilePos - 9
FileSeek(li_File,ll_FilePos)
FileRead(li_File,lb_Data)
ll_DataLen = Len(lb_Data)
ll_DataPos = 0
End If
If ll_FilePos >= ll_FileLength Then
lb_LoopFlag = False
End If
Loop

End If

// BMP文件格式
// 前两个字节是标识:标识可能有很多种
// 第 19,20,21,22 字节为宽度(width), 第 23,24,25,26 字节为高度(height)
// 四个字节组成dword, 低位在前
If String(BlobMid(lb_Data,1,2),EncodingANSI!) = 'BM' Then
ll_PictureWidth= ly_byte[19]+ly_byte[20]*256+ly_byte[21]*65536+ly_byte[22]*16777216
ll_PictureHeight= ly_byte[23]+ly_byte[24]*256+ly_byte[25]*65536+ly_byte[26]*16777216
End If

If ly_byte[2] = asc('P') and ly_byte[3] = asc('N') and ly_byte[4] = asc('G')Then
ll_PictureWidth= ly_byte[20]+ly_byte[19]*256+ly_byte[18]*65536+ly_byte[17]*16777216
ll_PictureHeight= ly_byte[24]+ly_byte[23]*256+ly_byte[22]*65536+ly_byte[21]*16777216
End If

If ll_PictureWidth > 0 And ll_PictureHeight > 0 Then
al_PictureWidth = ll_PictureWidth
al_PictureHeight = ll_PictureHeight
//将图像的真实大小转换为PBUnit大小,并返回
al_PictureWidth = PixelsToUnits(ll_PictureWidth,XPixelsToUnits!)
al_PictureHeight = PixelsToUnits(ll_PictureHeight,YPixelsToUnits!)
FileClose(li_File)
Return 1
Else
FileClose(li_File)
Return 0
End If

Return 0
永生天地 2010-03-03
  • 打赏
  • 举报
回复
引用 2 楼 newease 的回复:
建议使用Pegasus ImagXpress Pro Pegasus ImagXpress Pro(有特别版)

国外知名图像处理软件公司力作,提供专业的图像处理功能,用于开发文档图像管理应用程序包括图形编辑、浏览、打印、扫描、格式转换等功能,支持多达30种文件格式的处理并提供完整复杂的图形处理函数,并且速度极快。ImageXress可以很方便地处理图形的旋转、透明、动画、修剪的功能,提供多中图像调整算法,先进的进程管理,自动调整尺寸,JPEG2000和JPEG图像的免失真效果。

有破解的,发一个共享
pb8 2010-03-03
  • 打赏
  • 举报
回复
呵呵,你的pb哪个版本,N年前有写过的,发个邮箱我重写一个给你~~
Powertion 2010-03-03
  • 打赏
  • 举报
回复
我要求不高,实现我说的功能即可
ssflaq 2010-03-02
  • 打赏
  • 举报
回复
用.NET写吧。我也没有做过。用.NET写个控件
ahder 2010-03-02
  • 打赏
  • 举报
回复
up.................................
sunfor 2010-03-02
  • 打赏
  • 举报
回复
up..................................
newease 2010-03-02
  • 打赏
  • 举报
回复
建议使用Pegasus ImagXpress Pro Pegasus ImagXpress Pro(有特别版)

国外知名图像处理软件公司力作,提供专业的图像处理功能,用于开发文档图像管理应用程序包括图形编辑、浏览、打印、扫描、格式转换等功能,支持多达30种文件格式的处理并提供完整复杂的图形处理函数,并且速度极快。ImageXress可以很方便地处理图形的旋转、透明、动画、修剪的功能,提供多中图像调整算法,先进的进程管理,自动调整尺寸,JPEG2000和JPEG图像的免失真效果。


jlwei888 2010-03-02
  • 打赏
  • 举报
回复
Picture控件就行,但PB做这个,功能有限!

740

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 脚本语言
社区管理员
  • 脚本语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧