想知道如何为 Blackberry Messenger 创建动画 gif,我使用 Total Video Converter 将视频转换为动画 gif,它在 blackberry 图片目录上正确显示为 gif 图像,但当用作 blackberry Messenger 显示图片时,它确实不播放并且出现未对齐,我已经看到了几个正确显示的黑莓信使动画 gif 显示图片(即播放并正确对齐),有没有办法从可以作为黑莓信使显示图片播放的视频创建动画 gif
4 回答
BlackBerry 智能手机应用程序编程接口 (API) 集中的 BitmapField 可用于显示图像;但是,它只会显示动画 GIF 的第一帧。可以使用浏览器字段显示 Web 内容中的动画 GIF;但是,如果您只需要显示动画图像,这可能会给您的应用程序带来不必要的开销。
以下示例扩展了 BitmapField 以创建一个名为 AnimatedGIFField 的新类。此类可以添加到 Screen 并接受 GIFEncodedImage,它将对其进行动画处理。
/A field that displays an animated GIF.
public class AnimatedGIFField extends BitmapField
{
private GIFEncodedImage _image; //The image to draw.
private int _currentFrame; //The current frame in
the animation sequence.
private int _width; //The width of the image
(background frame).
private int _height; //The height of the image
(background frame).
private AnimatorThread _animatorThread;
public AnimatedGIFField(GIFEncodedImage image)
{
this(image, 0);
}
public AnimatedGIFField(GIFEncodedImage image, long style)
{
//Call super to setup the field with the specified style.
//The image is passed in as well for the field to
//configure its required size.
super(image.getBitmap(), style);
//Store the image and it's dimensions.
_image = image;
_width = image.getWidth();
_height = image.getHeight();
//Start the animation thread.
_animatorThread = new AnimatorThread(this);
_animatorThread.start();
}
protected void paint(Graphics graphics)
{
//Call super.paint. This will draw the first background
//frame and handle any required focus drawing.
super.paint(graphics);
//Don't redraw the background if this is the first frame.
if (_currentFrame != 0)
{
//Draw the animation frame.
graphics.drawImage(_image.getFrameLeft(_currentFrame), _image.getFrameTop(_currentFrame),
_image.getFrameWidth(_currentFrame), _image.getFrameHeight(_currentFrame), _image, _currentFrame, 0, 0);
}
}
//Stop the animation thread when the screen the field is on is
//popped off of the display stack.
protected void onUndisplay()
{
_animatorThread.stop();
super.onUndisplay();
}
//A thread to handle the animation.
private class AnimatorThread extends Thread
{
private AnimatedGIFField _theField;
private boolean _keepGoing = true;
private int _totalFrames; //The total number of
frames in the image.
private int _loopCount; //The number of times the
animation has looped (completed).
private int _totalLoops; //The number of times the animation should loop (set in the image).
public AnimatorThread(AnimatedGIFField theField)
{
_theField = theField;
_totalFrames = _image.getFrameCount();
_totalLoops = _image.getIterations();
}
public synchronized void stop()
{
_keepGoing = false;
}
public void run()
{
while(_keepGoing)
{
//Invalidate the field so that it is redrawn.
UiApplication.getUiApplication().invokeAndWait(new Runnable()
{
public void run()
{
_theField.invalidate();
}
});
try
{
//Sleep for the current frame delay before
//the next frame is drawn.
sleep(_image.getFrameDelay(_currentFrame) * 10);
}
catch (InterruptedException iex)
{} //Couldn't sleep.
//Increment the frame.
++_currentFrame;
if (_currentFrame == _totalFrames)
{
//Reset back to frame 0 if we have reached the end.
_currentFrame = 0;
++_loopCount;
//Check if the animation should continue.
if (_loopCount == _totalLoops)
{
_keepGoing = false;
}
}
}
}
}
}
注意:添加到项目的图像会automatically
在Portable Network Graphics (PNG) format
应用程序内置到.cod file
. 这在添加动画 GIF 时可能会导致问题,因为此过程会删除动画。此问题有两种解决方法。
首先是在 BlackBerry® Java® Developement Environment (BlackBerry JDE) 中打开应用程序的项目属性,单击编译选项卡并选中不要将图像文件转换为 png 复选框。这将阻止应用程序中的所有图像被转换,如果您的项目中的图像格式不是 GIF 和 PNG,这可能会降低效率。
单个图像的解决方法是将 GIF 图像的扩展名从 .gif 更改为其他内容(例如 .bin)。这将阻止 RIM 应用程序编译器 (RAPC) 将图像转换为 .png。
您也可以从此处将其下载为 .java 文件
你所要做的就是..
如果您还没有下载 photoscape http://www.photoscape.org/ps/main/download.php << 这个是安全的..在此处输入图像描述
打开它,然后按制作GIF,然后将图片拖到那里。
一旦你得到你的照片。按大小并选择“设置画布大小”
将 with 和 height 都设置为 150 或更小,并且 gif 必须是正方形。然后你把它保存到你的黑莓中,它应该可以工作
旧的但只是为了记录,您可以在http://www.flashdp.net免费在线创建动画 bbm 显示图片
GIF 画布必须是方形的,并且其大小不得超过 31Kb。