.net + flash 生成图片

.net + flash 生成图片,第1张

我虽然不知道Flash根据什么来生成GIF,但有一点可以肯定的是他先取到整个影片或者局部的像素内容。然后根据GIF文件的结构生成即可。

有兴趣的话那你可以了解一下GIF的文件结构了。然后根据Flash提供的BitmapData类获取位图数据,然后在生成GIF文件。不过仅限于ActionScript3(FlashPlayer100以上)或AIR。好像也见过有第三方库可以实现,你可以网上找找。

另外,站长团上有产品团购,便宜有保证

用二进制流的形式打开,读取出二进制代码存入数据库即可。

FileStream Pic = new FileStream(sFileName, FileModeOpen);//sFileName是路径

byte[] PicByte = new byte[PicLength];

PicRead(PicByte, 0, PicByteLength);

procedure TClipSaveForm FormCreate(Sender: TObject)

begin

View := False;

SpeedButton Down := True;

MyBitmap := TBitmap create;

try

MyBitmap Width := ;

MyBitmap Height := ;

except

Application terminate;

end;

Clipboard Clear;

NextViewerHandle := SetClipboardViewer(Handle)

end;

窗口关闭时 退出剪贴板观察器链 并释放内存

procedure TClipSaveForm FormDestroy(Sender: TObject)

begin

ChangeClipboardChain(Handle NextViewerHandle)

MyBitmap Free;

end;

在以上两段程序中用到的两个Windows API函数SetClipboardViewer和ChangeClipboardChain分别用于登录和退出剪贴板观察器链

程序保存位图的功能是在消息响应过程WMDrawClipboard中实现的 该过程在剪贴板内容有变化时被调用

procedure TClipSaveForm WMDrawClipboard(var Msg: MDrawClipboard)

var

FileName: String;

begin

If NextViewerHandle <> then

SendMessage(NextViewerHandle msg Msg )

If ClipBoard HasFormat(CF_BITMAP) then

begin

MyBitmap Assign(Clipboard)

If SaveDialog Execute then

begin

FileName := SaveDialog FileName;

MyBitmap SaveToFile(FileName)

end;

If View then

begin

WindowState := wsNormal;

Image Picture Bitmap := MyBitmap;

end;

end;

Msg Result := ;

end;

程序首先判断在剪贴板观察器链中是否还存在下一个观察器 如果有 则把消息传递下去 这是剪贴板观察器程序的义务 而后判断剪贴板上内容的格式是否为位图 如是 则首先把剪贴板上内容保存到数据成员MyBitmap中 并激活一个文件保存对话框把位图保存到文件中 如果View=True 则把窗口状态(WindowState)设置为wsNormal 并把MyBitmap赋给Image部件的相应值 使用户可以对剪贴板上的位图进行观察

消息响应过程WMChangeCBChain在剪贴板观察器链上其它观察器退出时被调用 根据被移出观察器的不同位置决定了不同的处理方法

procedure TClipSaveForm WMChangeCBChain(var Msg: MChangeCBChain)

begin

if Msg Remove = NextViewerHandle then

NextViewerHandle := Msg Next

else

if NextViewerHandle <> then

SendMessage(NextViewerHandle Msg Msg Msg Remove Msg Next)

Msg Result := ;

end;

窗口上有两个加速按钮 两个按钮 它们击键(click)事件处理过程如下 每一程序段的意义是非常显然的

procedure TClipSaveForm Button Click(Sender: TObject)

begin

Close;

end;

procedure TClipSaveForm Button Click(Sender: TObject)

begin

WindowState := wsMinimized;

end;

procedure TClipSaveForm SpeedButton Click(Sender: TObject)

begin

View := True;

Image Picture Bitmap := MyBitmap;

end;

procedure TClipSaveForm SpeedButton Click(Sender: TObject)

begin

View := False;

Image Picture Bitmap := nil;

end;

通过对这个程序的介绍 以下几点是应该注意的

提供了一种自己截获和处理剪贴板上内容的方法 读者可以根据需要进一步扩充

提供了响应Windows消息的方法 在第三篇有关自定义部件开发的内容中 这一问题还要详细论述

最后的一点启示是 在Delphi程序开发中巧妙应用传统的Windows方法(如消息处理 API函数等)仍是很有必要的 而在应用这些方法中所体现的方便之处 正是Delphi胜过其它可视化开发工具的一个重要方面

Windows的DDE原理和 Dephi的DDE实现机制

Windows的DDE原理

Windows的DDE机制基于Windows的消息机制 两个Windows应用程序通过相互之间传递DDE消息进行DDE会话(Conversation) 从而完成数据的请求 应答 传输 这两个应用程序分别称为服务器(Server)和客户(Client) 服务器是数据的提供者 客户是数据的请求和接受者

DDE会话由客户程序启动 客户程序把一条消息(WM_DDE_INITIATE)传播给当前运行的所有Windows程序 这条消息指明了客户程序所需要的一般数据(应用程序 主题) 拥有这些数据的DDE服务器可以响应这条被传播的消息 此时 DDE会话就开始了

由于在每个主题中 DDE服务器可以支持一个或多个数据项 所以在客户请求数据时应同时指明应用程序名 主题名和项目名 应用程序 主题 项目是DDE中三个最基本的概念

利用Windows本身提供的DDE消息和API进行DDE编程是一件相当棘手的问题 虽然使用DDE管理库(ddeml dll)可以一定程度上减轻开发者的工作负担 但开发DDE程序仍不是一件轻松的事情

此时Delphi出现了!Delphi通过其自身巧妙的设计使开发一个DDE应用程序同开发一个普通程序一样地快捷 方便

Delphi的DDE实现机制简介

Delphi把所有的DDE功能做到四个部件中 它们是

● TDDEClientConv : 用于客户程序建立和维护一个DDE会话

● TDDEClientItem : 用于客户程序建立和维护数据交换通道

● TDDEServerConv : 用于服务器程序响应DDE会话

● TDDEServerItem : 用于服务器程序维护数据交换通道

前两个部件用于生成一个DDE客户程序 后两个部件用于生成一个DDE服务器程序 如果一个应用程序同时拥有这些部件 则这一程序既可以充当DDE客户 也可以充当DDE服务器

会话部件TDDEClientConv TDDEServerConv用于建立和维护一个DDE会话 DDE会话包括DDE服务和DDE主题两部分

DDE服务是DDE服务器的名称 即在一般的Windows DDE机制中所讲的应用程序名 一般说来这一名称是DDE服务器应用程序执行文件名去掉 EXE后缀 比如你的应用程序要和Word 建立会话 则DDE服务为WINWORD 但也不尽然 比如你的应用程序要和Borland ReportSmith ( RPTSMITH EXE ) 建立会话 则DDE 服务为 Report Smith DDE服务到底如何 读者可参看相关的DDE服务器应用程序文档

DDE主题是一个包含了联接信息的数据单元 一般说来DDE 主题是一个包括扩展名的完整文件名 例如和Excel中的一个文件建立DDE会话 则主题可能是

Topic = c:\excel\Example\sale xls

如果服务器是一个Delphi应用程序 缺省情况下主题是包含欲联接数据窗体的标题 如果服务器使用了DDEServerConv部件 则要求使用部件DDEServerConv的名称作为DDE主题

项目部件TDDEclientItem TDDEServerItem用于建立和维护DDE数据的传输通道 DDE项目中包含着实际欲传输的数据 DDE项目的格式取决于DDE服务器应用程序 一个可能的DDE项目例子是电子表格中的单元和数据库表中的域 如果服务器是Delphi应用程序 则项目是连接的 DDEServerItem部件的名称

Delphi的DDE实现机制方便 实用 但也有一个令人遗憾的缺陷 只能传输文本数据以及命令 宏 而不能传输图像数据 在这一点上微软公司推出的Visual Basic 要略胜一筹 不过在目前文本数据的使用仍是最广泛的 而且图像传输可以利用剪贴板和OLE来实现 则这一缺陷也并无很大的影响

lishixinzhi/Article/program/Delphi/201311/25230

最近做项目要通过的绝对路径找到的URI,然后删除,小小总结一下获取URI的方法,亲自试验在

android 413的系统上都是可用的。

1将所有的路径取出,遍历比较找到需要的路径,取出URI,效率较低

其中 MediaStoreMediaColumnsDATA 字段存的就是的绝对路径,

最后mImageUri得到的就是的URI

1 Uri mUri = Uriparse("content://media/external/images/media");

2 Uri mImageUri = null;

3 Cursor cursor = managedQuery(

4 MediaStoreImagesMediaEXTERNAL_CONTENT_URI, null, null, null,

5 MediaStoreImagesMediaDEFAULT_SORT_ORDER);

6 cursormoveToFirst();

7

8 while (!cursorisAfterLast()) {

9 String data = cursorgetString(cursor

10 getColumnIndex(MediaStoreMediaColumnsDATA));

11 if (picPathequals(data)) {

12 int ringtoneID = cursorgetInt(cursor

13 getColumnIndex(MediaStoreMediaColumns_ID));

14 mImageUri = UriwithAppendedPath(mUri, "" + ringtoneID);

15 break;

16 }

17 cursormoveToNext();

18 }

2直接从媒体数据库根据字段取出相应的记录,效率较高

1 //TYLT: add by duanyf 20121027 start

2 String type = UtilsensureNotNull(intentgetType());

3 Logd(TAG, "uri is " + uri);

4 if (urigetScheme()equals("file") && (typecontains("image/")))

{

5 String path = urigetEncodedPath();

6 Logd(TAG, "path1 is " + path);

7 if (path != null) {

8 path = Uridecode(path);

9 Logd(TAG, "path2 is " + path);

10 ContentResolver cr = thisgetContentResolver();

11 StringBuffer buff = new StringBuffer();

12 buffappend("(")

13 append(ImagesImageColumnsDATA)

14 append("=")

15 append("'" + path + "'")

16 append(")");

17 Cursor cur = crquery(

18 ImagesMediaEXTERNAL_CONTENT_URI,

19 new String[] { ImagesImageColumns_ID },

20 bufftoString(), null, null);

21 int index = 0;

22 for (curmoveToFirst(); !curisAfterLast(); cur

23 moveToNext()) {

24 index = curgetColumnIndex(ImagesImageColumns_ID);

25 // set _id value

26 index = curgetInt(index);

27 }

28 if (index == 0) {

29 //do nothing

30 } else {

31 Uri uri_temp = Uri

32 parse("content://media/external/images/media/"

33 + index);

34 Logd(TAG, "uri_temp is " + uri_temp);

35 if (uri_temp != null) {

36 uri = uri_temp;

37 }

38 }

39 }

40 }

41 //TYLT: add by duanyf 20121027 end

3直接根据路径通过 ContentProvider 的 delete() 方法删除,两行代码搞定,效率最高

1 String params[] = new String[]{filepath};

2

ctxgetContentResolver()delete(MediaStoreImagesMediaEXTERNAL_CONTENT_URI,

MediaStoreImagesMediaDATA + " LIKE ", params);

Image控件加载包括加载动态,加载静态两种方式。

加载动态通过生成一个BitmapImage,创建该对象后,赋给Image的Source即可。加载的形式:

1 BitmapImage myBitmapImage =new BitmapImage();

2 myBitmapImageBeginInit();

3  //取得数据库存储的字段,MS-SQL的Image类型

4  Byte[] mybyte = ReadImage();

5 myBitmapImageStreamSource =new MemoryStream(mybyte);

6 myBitmapImageEndInit();

7 myImageWidth = myBitmapImageWidth/2;

8 myImageHeight = myBitmapImageHeight/2;

9 myImageSource = myBitmapImage;

MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。

在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。

①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。

select映射中resultMap的值是一个外部resultMap的id,表示返回结果映射到哪一个resultMap上,外部resultMap的type属性表示该resultMap的结果是一个什么样的类型,这里是Blog类型,那么MyBatis就会把它当作一个Blog对象取出。resultMap节点的子节点id是用于标识该对象的id的,而result子节点则是用于标识一些简单属性的,其中的Column属性表示从数据库中查询的属性,Property则表示查询出来的属性对应的值赋给实体对象的哪个属性。简单查询的resultMap的写法就是这样的

你应该先从Spring MVC看起,这个才是最主要的框架,整个项目贯穿都是它,mybatis这个是有规则的,只要按照网上搭建好的搭建一下基本就定型了,freemarker是模版生成工具,要套接Spring的,这个也是有模型可参考的,springMVC有通过XML或注解两种配置方式,见意了解一下注解,具体流程如下:

先学spring Mvc 学到可以建一个框架,然后可以从jsp页面正常跑到action(controller)再返回到jsp,中间可以传几个参数试试,然后往其中插入mybatis框架,可以能正常连接到数据库,增删改查,最后再加入freemarker,生成你想要的东西。

public static byte[] ImageDatabytes(string FilePath)

{

if(!FileExists(FilePath))

return null;

Bitmap myBitmap = new Bitmap(ImageFromFile(FilePath));

using (MemoryStream curImageStream = new MemoryStream())

{

myBitmapSave(curImageStream, SystemDrawingImagingImageFormatPng);

curImageStreamFlush();

byte[] bmpBytes = curImageStreamToArray();

//如果转字符串的话

//string BmpStr = ConvertToBase64String(bmpBytes);

return bmpBytes ;

}

}

用上面的方法将转换成二进制,再存进数据库。

以上就是关于.net + flash 生成图片全部的内容,包括:.net + flash 生成图片、C#怎么把图片转换成二进制数据、DELPHI基础教程:剪贴板和动态数据交换(一)[3]等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9617687.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存