博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zw版【转发·台湾nvp系列Delphi例程】HALCON HImage与Bitmap格式转换
阅读量:6649 次
发布时间:2019-06-25

本文共 2643 字,大约阅读时间需要 8 分钟。

zw版【转发·台湾nvp系列Delphi例程】HALCON HImage与Bitmap格式转换

 

(Delphi Prism)

namespace HImage_Bitmap_Prism;
interface
uses
System.Drawing,
System.Collections,
System.Collections.Generic,
System.Windows.Forms,
System.ComponentModel,
System.Drawing,
System.Drawing.Imaging,
System.Runtime.InteropServices,
HalconDotNet ;
type
/// <summary>
/// Summary description for MainForm.
/// </summary>
MainForm = partial class(System.Windows.Forms.Form)
private
[DllImport('kernel32', EntryPoint := 'RtlMoveMemory', ExactSpelling := true, CharSet := CharSet.Ansi, SetLastError := true)]
class method CopyMemory(Destination: System.Int32; Source: System.Int32; length: System.Int32); external;
method MainForm_Load(sender: System.Object; e: System.EventArgs);
protected
method Dispose(disposing: Boolean); override;
public
constructor;
end;
implementation
{$REGION Construction and Disposition}
constructor MainForm;
begin
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
end;
method MainForm.Dispose(disposing: Boolean);
begin
if disposing then begin
if assigned(components) then
components.Dispose();
//
// TODO: Add custom disposition code here
//
end;
inherited Dispose(disposing);
end;
{$ENDREGION}
method MainForm.MainForm_Load(sender: System.Object; e: System.EventArgs);
begin
var img1: HImage := new HImage();
var pt: IntPtr;
var mwidth: System.Int32;
var mheight: System.Int32;
var mtype: System.String := '';
var img: Bitmap;
var pal: ColorPalette;
var i: System.Int32;
var Alpha: System.Int32 := 255;
var bitmapData: BitmapData;
var rect: Rectangle;
var ptr: array of System.Int32 := new System.Int32[2];
var PixelSize: System.Int32;
img1.ReadImage('clip');
pt := img1.GetImagePointer1(out mtype, out mwidth, out mheight);
img := new Bitmap(mwidth, mheight, PixelFormat.Format8bppIndexed);
pal := img.Palette;
for i :=0 to 255 do
begin
pal.Entries := Color.FromArgb(Alpha, i, i, i);
end;
img.Palette := pal;
rect := new Rectangle(0, 0, mwidth, mheight);
bitmapData := img.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
PixelSize := Bitmap.GetPixelFormatSize(bitmapData.PixelFormat) / 8;
ptr[0] := bitmapData.Scan0.ToInt32();
ptr[1] := pt.ToInt32();
if mwidth mod 4 = 0 then
CopyMemory(ptr[0], ptr[1], mwidth * mheight * PixelSize)
else
begin
i := 0;
while i < mheight do
begin
ptr[1] := ptr[1] + mwidth;
CopyMemory(ptr[0], ptr[1], mwidth * PixelSize);
ptr[0] := ptr[0] + bitmapData.Stride;
inc(i)
end;
end;
img.UnlockBits(bitmapData);
pictureBox1.Image := img;
img1.Dispose()
end;
end.

 

转载于:https://www.cnblogs.com/ziwang/p/4851481.html

你可能感兴趣的文章
自学PL/SQL 第一讲decalring variables
查看>>
DNS服务器在域环境中的作用
查看>>
大话IT第十七期:体验Ubuntu 11.10
查看>>
卢松松:谷歌中国的死亡螺旋
查看>>
Photoshop制作一只可爱的卡通小鸟
查看>>
华为5700系列交换机常用配置示例
查看>>
COM本质论 笔记
查看>>
VisualStudio2010扩充插件
查看>>
java.io.IOException:stream closed 异常的原因及处理
查看>>
ACM HDU 1029Ignatius and the Princess IV
查看>>
iOS开发之一些字符串常用的代码
查看>>
Android开发笔记之adb参数指南
查看>>
SQL中sum(),avg()等统计结果为null的解决方法
查看>>
初学Java的几个tips
查看>>
cvDilate
查看>>
android照相及照片上传
查看>>
关于信息隐藏的感想及其它废话
查看>>
RCP学习:Bundle的生命周期
查看>>
现代 C++ 编程指南
查看>>
记录我的旅程8之JavaScript Dom学习笔记
查看>>