如何调整来自HTTP服务器的图像的大小和黑莓屏幕的宽度?请任何解决方案。如何根据黑莓的高度和宽度调整图像大小
1
A
回答
1
从图像的字节创建一个EncodedImage。
使用Display.getHeight()
和Display.getWidth()
来获得显示器的尺寸。
然后使用EncodedImage.scaleImage32()
进行调整大小。请确认this post。
2
尝试使用参数Disply.getWidth()& Display.getHieght()。
package CustomizedField;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Graphics;
public class GPATools
{
/**
* Resizes a bitmap with an alpha channel (transparency)
* without the artifacts introduced
* by <code>scaleInto()</code>.
*
* @param bmpSrc Source Bitmap
* @param nWidth New Width
* @param nHeight New Height
* @param nFilterType Filter quality to use. Can be
* <code>Bitmap.FILTER_LANCZOS</code>,
* <code>Bitmap.FILTER_BILINEAR</code> or
* <code>Bitmap.FILTER_BOX</code>.
* @param nAspectRatio Specifies how the picture is resized. Can be
* <code>Bitmap.SCALE_TO_FIT</code>,
* <code>Bitmap.SCALE_TO_FILL</code> or
* <code>Bitmap.SCALE_STRETCH</code>.
* @return The resized Bitmap in a new object.
*/
public static Bitmap ResizeTransparentBitmap(Bitmap bmpSrc,
int nWidth, int nHeight, int nFilterType, int nAspectRatio)
{
if(bmpSrc== null)
return null;
//Get the original dimensions of the bitmap
int nOriginWidth = bmpSrc.getWidth();
int nOriginHeight = bmpSrc.getHeight();
if(nWidth == nOriginWidth && nHeight == nOriginHeight)
return bmpSrc;
//Prepare a drawing bitmap and graphic object
Bitmap bmpOrigin = new Bitmap(nOriginWidth, nOriginHeight);
Graphics graph = Graphics.create(bmpOrigin);
//Create a line of transparent pixels for later use
int[] aEmptyLine = new int[nWidth];
for(int x = 0; x < nWidth; x++)
aEmptyLine[x] = 0x00000000;
//Create two scaled bitmaps
Bitmap[] bmpScaled = new Bitmap[2];
for(int i = 0; i < 2; i++)
{
//Draw the bitmap on a white background first,
//then on a black background
graph.setColor((i == 0) ? Color.WHITE : Color.BLACK);
graph.fillRect(0, 0, nOriginWidth, nOriginHeight);
graph.drawBitmap(0, 0, nOriginWidth, nOriginHeight, bmpSrc, 0, 0);
//Create a new bitmap with the desired size
bmpScaled[i] = new Bitmap(nWidth, nHeight);
if(nAspectRatio == Bitmap.SCALE_TO_FIT)
{
//Set the alpha channel of all pixels to 0
//to ensure transparency is
//applied around the picture, if needed by the transformation
for(int y = 0; y < nHeight; y++)
bmpScaled[i].setARGB(aEmptyLine, 0, nWidth,
0, y, nWidth, 1);
}
//Scale the bitmap
bmpOrigin.scaleInto(bmpScaled[i], nFilterType, nAspectRatio);
}
//Prepare objects for final iteration
Bitmap bmpFinal = bmpScaled[0];
int[][] aPixelLine = new int[2][nWidth];
//Iterate every line of the two scaled bitmaps
for(int y = 0; y < nHeight; y++)
{
bmpScaled[0].getARGB(aPixelLine[0], 0, nWidth, 0, y, nWidth, 1);
bmpScaled[1].getARGB(aPixelLine[1], 0, nWidth, 0, y, nWidth, 1);
//Check every pixel one by one
for(int x = 0; x < nWidth; x++)
{
//If the pixel was untouched (alpha channel still at 0),
//keep it transparent
if(((aPixelLine[0][x] >> 24) & 0xff) == 0)
aPixelLine[0][x] = 0x00000000;
else
{
//Compute the alpha value based on the difference
//of intensity in the red channel
int nAlpha = ((aPixelLine[1][x] >> 16) & 0xff) -
((aPixelLine[0][x] >> 16) & 0xff) + 255;
if(nAlpha == 0)
aPixelLine[0][x] = 0x00000000; //Completely transparent
else if(nAlpha >= 255)
aPixelLine[0][x] |= 0xff000000; //Completely opaque
else
{
//Compute the value of the each channel one by one
int nRed = ((aPixelLine[0][x] >> 16) & 0xff);
int nGreen = ((aPixelLine[0][x] >> 8) & 0xff);
int nBlue = (aPixelLine[0][x] & 0xff);
nRed = (int)(255 +
(255.0 * ((double)(nRed-255)/(double)nAlpha)));
nGreen = (int)(255 +
(255.0 * ((double)(nGreen-255)/(double)nAlpha)));
nBlue = (int)(255 +
(255.0 * ((double)(nBlue-255)/(double)nAlpha)));
if(nRed < 0) nRed = 0;
if(nGreen < 0) nGreen = 0;
if(nBlue < 0) nBlue = 0;
aPixelLine[0][x] = nBlue | (nGreen<<8) |
(nRed<<16) | (nAlpha<<24);
}
}
}
//Change the pixels of this line to their final value
bmpFinal.setARGB(aPixelLine[0], 0, nWidth, 0, y, nWidth, 1);
}
return bmpFinal;
}
}
1
这里是一个调整图片大小,任何大小的方法:
public EncodedImage resizeImage(EncodedImage image, int newWidth, int newHeight)
{
int scaleFactorX = Fixed32.div(Fixed32.toFP(image.getWidth()), Fixed32.toFP(newWidth));
int scaleFactorY = Fixed32.div(Fixed32.toFP(image.getHeight()), Fixed32.toFP(newHeight));
return image.scaleImage32(scaleFactorX, scaleFactorY);
}
你要只是传递的宽度和高度 - 要在其中调整图片的大小作为参数。
您可以分别使用Display.getWidth()
& Display.getHeight()
获得显示屏的宽度和高度。
相关问题
- 1. 如何根据显示屏幕的宽度和高度调整黑莓的图像大小?
- 2. 根据宽度调整图像大小
- 3. 根据UITableViewCell调整背景图像的大小标签的高度和宽度
- 4. 使用指定的高度和宽度调整图像大小
- 5. Android:调整图像宽度和高度以调整图像大小
- 6. PHP图像大小调整 - 设置高度和宽度自动
- 7. 如何根据高度调整图像的大小,并根据高度进行调整
- 8. 图像大小调整 - 宽度100%,最大高度
- 9. Google Python图像库 - 如何根据图像宽度调整图像大小?
- 10. 我如何使高度和宽度根据屏幕自动调整大小?
- 11. 如何在调整大小时计算图像的宽度和高度值?
- 12. 使用PHP调整大小(宽度/高度)图像
- 13. 如何根据div的宽度调整图片大小?
- 14. 根据高度调整ImageView宽度
- 15. Android:将位图的大小调整为更大的像素宽度和高度
- 16. 图像旋转 - 基于图像高度和宽度调整画布大小
- 17. 根据内部图像调整元素高度的大小
- 18. 根据父宽度调整图像大小jQuery
- 19. 根据父宽度和高度调整子视图的尺寸
- 20. 如何设置TinyMCE的最小调整大小宽度/高度?
- 21. 调整图像的最大宽度和高度
- 22. jQuery根据动态角度调整图像大小以适合div的宽度和高度
- 23. 根据内容宽度和高度调整弹出窗口的大小
- 24. 根据窗口高度调整图像大小
- 25. 根据可用宽度调整图像
- 26. imageflow滑块图像的宽度和大小调整大小
- 27. 最大高度和宽度与jQuery的大小调整
- 28. 如何调整图像的高度和宽度在PHP笨
- 29. 如何使图像的宽度自定义高度调整大小
- 30. 调整大小的图像与确切的宽度和高度在php