Imports System
Imports System.Drawing
<ComClass(dImage.ClassId, dImage.InterfaceId, dImage.EventsId)> _
Public Class dImage

#Region "COM GUIDs"
' 这些 GUID 提供该类的 COM 标识及其 COM 接口。
' 如果您更改它们,现有的客户端将再也无法
' 访问该类。
Public Const ClassId As String = "29641F37-8FA4-4ED9-9118-9DA8EFA306B9"
Public Const InterfaceId As String = "06E4B037-2461-4F83-96BE-2A5D1CAAB0CE"
Public Const EventsId As String = "802EBB14-2D4D-416E-BA26-E8ADCD480E26"
#End Region

' 可创建的 COM 类必须具有不带参数的 
' Public Sub New(),否则,该类将不会注册到 COM 注册表中,
' 而且不能通过 CreateObject 
' 来创建。
Private myImage As Drawing.Bitmap
Private syimg As Drawing.Bitmap
Private syok As Boolean = False
Private myok As Boolean = False
Public Sub New()
MyBase.New()
End Sub
Public WriteOnly Property bigImage() As String
Set(ByVal Value As String)
Try
myImage = New Bitmap(Value)
myok = True
Catch e As IO.IOException
myok = False
End Try
End Set
End Property
Public WriteOnly Property LogoImage() As String
Set(ByVal Value As String)
Try
syimg = New Bitmap(Value)
syok = True
Catch ex As Exception
syok = False
End Try
End Set
End Property
Public Function SaveAs(ByVal ToFile As String, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal nLogo As Boolean) As String
Try
If myok = False Then
Return "err0"
Exit Function
End If
Dim newbmp As Bitmap = New Bitmap(nWidth, nHeight, Imaging.PixelFormat.Format16bppArgb1555)
Dim iX As Integer
Dim iY As Integer
Dim xMax As Integer
Dim yMax As Integer
For iX = 0 To nWidth - 1
For iY = 0 To nHeight - 1
newbmp.SetPixel(iX, iY, Color.White)
Next
Next
If nWidth < myImage.Width Or nHeight < myImage.Height Then
If myImage.Width / myImage.Height > nWidth / nHeight Then
xMax = nWidth
yMax = myImage.Height * nWidth \ myImage.Width
Else
yMax = nHeight
xMax = myImage.Width * nHeight \ myImage.Height
End If
Else
xMax = myImage.Width
yMax = myImage.Height
End If
Dim tembmp As Bitmap = New Bitmap(myImage, xMax, yMax)
xMax = (newbmp.Width - tembmp.Width) \ 2
yMax = (newbmp.Height - tembmp.Height) \ 2
For iX = 0 To tembmp.Width - 1
For iY = 0 To tembmp.Height - 1
newbmp.SetPixel(iX + xMax, iY + yMax, tembmp.GetPixel(iX, iY))
Next
Next
If syok And nLogo Then
Dim cob As Color
Dim coc As Color
xMax = newbmp.Width - syimg.Width - 4
yMax = newbmp.Height - syimg.Height - 3
For iX = 0 To syimg.Width - 1
For iY = 0 To syimg.Height - 1
cob = syimg.GetPixel(iX, iY)
coc = newbmp.GetPixel(iX + xMax, iY + yMax)
newbmp.SetPixel(iX + xMax, iY + yMax, getnewco(cob, coc))
Next
Next
End If
newbmp.Save(ToFile, Imaging.ImageFormat.Jpeg)
newbmp.Dispose()
tembmp.Dispose()
newbmp = Nothing
tembmp = Nothing
Return "OK"
Catch ex As Exception
Return ex.ToString
End Try
End Function

Public ReadOnly Property Width() As Integer
Get
Return myImage.Width
End Get
End Property
Public ReadOnly Property Height() As Integer
Get
Return myImage.Height
End Get
End Property
Public Sub Close()
myImage.Dispose()
syimg.Dispose()
myImage = Nothing
syimg = Nothing
End Sub
Private Function getnewco(ByVal c1 As Color, ByVal c2 As Color) As Color
Dim a1 As Integer = c1.A
Dim r1 As Integer = c1.R
Dim g1 As Integer = c1.G
Dim b1 As Integer = c1.B
Dim a2 As Integer = c2.A
Dim r2 As Integer = c2.R
Dim g2 As Integer = c2.G
Dim b2 As Integer = c2.B
a2 = 255 - a1
r1 = CInt((r1 * a1 / 255) + (r2 * a2 / 255))
g1 = CInt((g1 * a1 / 255) + (g2 * a2 / 255))
b1 = CInt((b1 * a1 / 255) + (b2 * a2 / 255))
Return Color.FromArgb(a1, r1, g1, b1)
End Function

End Class

转载于:https://www.cnblogs.com/nieyj/archive/2009/07/20/1526922.html

VB.NET写的简单图片缩放处理组件源代码,支持添加半透明效果小图标(转)相关推荐

  1. 基于 vue 编写的vue图片预览组件,支持单图和多图预览,仅传入一个图片地址,即可实现图片预览效果,可自定义背景、按钮颜色等

    hevue-img-preview 简介 完整版下载地址:基于 vue 编写的vue图片预览组件 本组件是一个基于 vue 编写的 vue 图片预览组件,支持 pc 和手机端,支持单图和多图预览,仅传 ...

  2. pc 图片预览放大 端vue_移动端Vue.js的图片预览组件,支持放缩、滑动功能!

    功能:图片预览组件,支持双手指放大/缩小,双击放大/缩小,单击消失隐藏. 注:touch事件请手机预览 源码分享 组件参数 data() { return { loading: 2, // 1成功 2 ...

  3. Java 简单图片 马赛克,黑白画,珠纹化,油画效果等处理技术 原理及实现 (简单UI)

    Java 图片马赛克,黑白画,珠纹化,油画效果等处理技术 原理及实现 1. 需要用到的包 java.awt // 用于创建用户界面和绘制图形图像的所有类 javax.swing // 提供一组&quo ...

  4. 用Vue写一个简单好看的菜单组件(Vue实战系列)

    一.需求 实现一个左边栏菜单,菜单只包括两层: 点击出现水波纹效果: 激活效果:有一个绿球小点,标识激活的菜单,顶层菜单被激活时左边出现浅色激活标志: 二.实现 新建一个菜单组件whrmenu pro ...

  5. java缩放图片_java 图片缩放(2)

    之前写过一个图片缩放的功能,对于大幅度缩小,效果很差,这里做了小部分改进 原理是缩小的时候不是一次就缩小完,而是分成几次缩小,这样的好处是算法对像素的计算更加准确, final int bs = 2; ...

  6. Vue-Element写一个简单的列表管理23/100统

    1.data语法3种; 1)vue标准写法 data:{ } 2)vue函数写法,返回值 return js对象 data:function(){ return{ }} 3)es6新标准函数写法(el ...

  7. vue 实现无限轮播_使用Vue制作图片轮播组件思路详解

    之前一直都没有认真的写过一个组件.以前在写业务代码的过程中,都是用的别人封装好的组件,这次尝试着写了一个图片轮播组件,虽然比不上知名的轮播组件,但它的功能基本完整,而且在写这个组件的过程中,学的东西也 ...

  8. android 图片缩放算法,Android大图加载,缩放,滑动浏览--SubsamplingScaleImageView 源码分析大图加载...

    **************这个开源项目有点大的,也不知道几篇能写完,先根据功能点分析解读********************* 1.写在前面 图片浏览的坑不少,大图加载导致内存溢出的情况相信每个 ...

  9. 纯CSS图片缩放后显示详细信息

    哎~!突然好久没更新博客了,最近总在下雨,晚上也经常没有时间来管理博客(目前在敲自己的一个平台,晢时还在写逻辑层的代码),好吧!废话不多说了,言归正传. 现在很多图片缩放的特效大多数都是用javasc ...

最新文章

  1. 小程序:js获取验证码时(倒计时模块)
  2. 认识Linux的磁盘配额(转载)
  3. aspxgridview 增加行号
  4. Springboot2.x +JPA 集成 Apache ShardingSphere 读写分离
  5. python中一切都是对象_python中一切皆对象
  6. 熬夜写代码,不如换女装入 GitHub 获上千 Star?
  7. appium+python 多设备并行执行脚本【转】
  8. Codeforces348B Apple Tree DFS
  9. wps文档服务器授权怎么解,如何解决WPS提示授权已到期的问题
  10. sublime 配置快捷键
  11. java base64转二进制_使用Java将Base64转换为二进制
  12. VC++ 判断打印机状态
  13. 1024程序员节活动继续:购书优惠劵,折后再折,赶紧来抢啊
  14. 利用阿里云虚拟机作为跳板机实现内网穿透
  15. Mac在4k显示器下idea滚动掉帧卡顿解决办法
  16. 树莓派+MediaPipe+PCA9685+自制摄像机云台实现人脸跟踪移动
  17. Linux(Ubuntu)同步互联网时间(ntpdate)
  18. python3.6.6对应pydev_python之pydev安装
  19. 在细粒度与高密度场景下的 基于人头的 人流量监测方法【神经网络】
  20. 26.Odoo产品分析 (三) – 人力资源板块(6) – 工资表(2)

热门文章

  1. @SpringBootApplication与@EnableAutoConfiguration区别
  2. linux非编工作站,高清EDIUS非编网络系统建设 在线非编系统
  3. Go实现短url项目
  4. drill 数据库查询方式简单说明
  5. C#中的程序集和命名空间
  6. Mysql 异步复制
  7. 回溯递归算法----八皇后问题
  8. Skype for Business Server 2015-04-前端服务器-5-创建DNS记录
  9. linux内核参数调优,缓冲区调整,tcp/udp连接管理,保持,释放优化,gossary,terms
  10. 开电视显示网管服务器数据下发超时,关于网络管理中的常见问题解决