clc;close all;clear all
info = imfinfo('3gif');%第一次读取,用于获取属性值
W = infoWidth;
H = infoHeight;
W = W(1);
H = H(1);
len = length(info);
figure('NumberTitle', 'off', 'ToolBar', 'none', 'Menu', 'none');
pos = get(gcf, 'position');
set(gcf, 'position', [pos(1) pos(2) W H]);
set(gca, 'position', [0 0 1 1]);
hold on;
for i = 1 : len
str=sprintf('photo%djpg',i);
[Ii, map] = imread('3gif', 'frames', i);
imwrite(Ii,str,'jpg');
F(:, i) = im2frame(flipud(Ii), map);
end
movie(F, 20);
close;
方法一:获取的宽高。可以用offsetWidth和offsetHeight;
方法二:
你先获取img标签标签元素。用getElementById()或者getElementsByClassName或者getElementsByTagName()都可以。
获取之后,如果你的img有width和height 属性,可以直接用img元素对象点属性
documentgetElementsByTagName("img")[0]width;
documentgetElementsByTagName("img")[0]height;
3如果img元素本身没有width和height属性。你可以获取img元素的style样式
function getStyle(obj,attr){
return objcurrentStyleobjcurrentStyle[attr]:getComputedStyle(obj)[attr];
};
obj是你的img标签对象,attr是你的想要获取的属性;
currentStyle支持IE低版本浏览器,
getComputedStyle支持主流浏览器
以acd看图为例:
在默认状态下,选中后,在状态栏会显示图像的信息,有图像KB大小也有长宽尺寸,
不过这样一个一个查看太慢了,按Alt + O快捷键或者选择工具菜单>选项,打开选项设置窗口,
选择左侧文件列表>缩略图显示,再点击右侧的缩略图信息
在d出的选取缩略图显示信息中展开图像属性:勾图像大小,展开文件属性:勾选大小(KB)
点击添加按钮,添加到当前显示明细中,点击确定,返回选项窗口,点击确定。
看缩略图下面很清楚的显示出了图像大小,也就是长宽像素值,还有KB大小。
制作游戏时,我们最常用的格式是png,因为png可以有透明的背景,这样在游戏显示是,透明的部分不会显示,只显示我们要的那部分。但是,透明的部分依然是的一部分,当你制作了一个非矩形的按钮,会有相当多的透明部分点击有效,那么如何做到点击透明部分无效呢?这就是本片文章要讲的:获取图像像素值。当然不仅仅在制作非矩形按钮时有用,在游戏中的很多涉及处理功能的地方也大有用途。
废话不多说,直接贴源码(Cocos2d-x 3x版本):
HelloWorldSceneh文件
HelloWorldScenecpp文件:
在GetRGBA函数中,调用了OpenGL的接口glReadPixels,它用于读取一些像素。当前可以简单理解为“把已经绘制好的像素(它可能已经被保存到显卡的显存中)读取到内存”。
glReadPixels函数总共有七个参数。前四个参数可以得到一个矩形,该矩形所包括的像素都会被读取出来。(第一、二个参数表示了矩形的左下角横、纵坐标,坐标以窗口最左下角为零,最右上角为最大值;第三、四个参数表示了矩形的宽度和高度)
第五个参数表示读取的内容,例如:GL_RGB就会依次读取像素的红、绿、蓝三种数据,GL_RGBA则会依次读取像素的红、绿、蓝、alpha四种数据,GL_RED则只读取像素的红色数据(类似的还有GL_GREEN,GL_BLUE,以及GL_ALPHA)。如果采用的不是RGBA颜色模式,而是采用颜色索引模式,则也可以使用GL_COLOR_INDEX来读取像素的颜色索引。目前仅需要知道这些,但实际上还可以读取其它内容,例如深度缓冲区的深度数据等。
第六个参数表示读取的内容保存到内存时所使用的格式,例如:GL_UNSIGNED_BYTE会把各种数据保存为GLubyte,GL_FLOAT会把各种数据保存为GLfloat等。
第七个参数表示一个指针,像素数据被读取后,将被保存到这个指针所表示的地址。注意,需要保证该地址有足够的可以使用的空间,以容纳读取的像素数据。例如一幅大小为256256的图象,如果读取其RGB数据,且每一数据被保存为GLubyte,总大小就是:2562563 = 196608字节,即192千字节。如果是读取RGBA数据,则总大小就是2562564 = 262144字节,即256千字节。
注意:glReadPixels实际上是从缓冲区中读取数据,如果使用了双缓冲区,则默认是从正在显示的缓冲(即前缓冲)中读取,而绘制工作是默认绘制到后缓冲区的。因此,如果需要读取已经绘制好的像素,往往需要先交换前后缓冲。
CImage m_image;//m_image就是要处理的图像
int bit=m_ImageGetBPP();//获取每点像素的位数(8,24,32等),如果只处理24位图,则bit可直接赋值为24
int width=m_ImageGetWidth();//图像的宽度(单位为像素)
int height=m_ImageGetHeight();//图像的长度(单位为像素)
HBITMAP bitmap = m_ImageDetach();//
CBitmap b_Image=CBitmap::FromHandle(bitmap);//获取CBitmap类的实例
DWORD totalbytes=widthheightbit/8;//要保存像素数据需要的总的字节数,24位图的话,每个像素需要3个字节
byte lpBits=new byte[totalbytes];//字节型数组,每个单位存一个字节的数据
int bytes=b_Image->GetBitmapBits(totalbytes,lpBits);//把像素数据存到数组lpBits里,通过看bytes是否为0可以知道是否成功,为0则没有成功
//接下来遍历数组即可获取像素数据,因为24位图是3个字节构成一个像素,所以遍历时要注意间隔。
1,加载一张,使用GDI+的Bitmap类,创建一个对象,Bitmap bitmap=Bitmap::FromFile("examplepng");
2,从Bitmap对象中获得HBITMAP句柄,HBITMAP句柄指向位图,
HBITMAP hBMP; bitmap->GetHBITMAP(NULL,hBMP);
3,从句柄中找到位图结构体,位图结构体(BITMAP)包含了关于位图的所有信息
BITMAP bitmap; GetObject(hBMP,sizeof(BITMAP),&bitmap);
4,参照BITMAP结构体,就能得到你要的字节数组
bitmapbmBits;
不过得到的不一定是字节数组,因为图像有的用3个字节表示一个像素,有的是一个位标识一个像素。
关于图像像素值,我想要先讲一下Java中如何组织一个图像对象BufferedImage的,
一个BufferedImage的像素数据储存在Raster中,ColorModel里面储存颜色空间,类型等
信息,当前Java只支持一下三种图像格式- JPG,PNG,GIF,如何向让Java支持其它格式,首
先要 完成Java中的图像读写接口,然后打成jar,加上启动参数- Xbootclasspath/p
newimageformatIOjar即可。
取得BufferedImage的代码如下:
File file = new File("D:\\test\\blue_flowerjpg");
BufferedImage image = ImageIOread(file);
取得像素使用getRGB,代码如下:
int type= imagegetType();
if ( type ==BufferedImageTYPE_INT_ARGB || type == BufferedImageTYPE_INT_RGB )
return (int [])imagegetRaster()getDataElements(x, y, width, height, pixels );
else
return imagegetRGB( x, y, width, height, pixels, 0, width );
写入像素,才可能用到getRaster,在type为ARGB 或RGB时,必须使用getRaster()setDataElements方式设置,其他格式直接setRGB,代码如下:
int type= imagegetType();
if ( type ==BufferedImageTYPE_INT_ARGB || type == BufferedImageTYPE_INT_RGB )
imagegetRaster()setDataElements(x, y, width, height, pixels );
else
imagesetRGB(x, y, width, height, pixels, 0, width );
以上就是关于如何用matlab读取gif每一帧图像的像素值全部的内容,包括:如何用matlab读取gif每一帧图像的像素值、如何在JS中获取图片的像素、如何获得图片的宽高像素数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)