Масштабирование изображения и запись измененного изображения в файл blackberry
Я использую следующий код для изменения размера и сохранения файла на устройстве Blackberry. После масштабирования изображения я пытаюсь записать файл изображения на устройство. Но это дает те же данные. (Высота и ширина изображения одинаковы.) Я должен сделать масштабированный файл изображения. Может кто-нибудь помочь мне???
класс ResizeImage расширяет MainScreen, реализует FieldChangeListener
{
private String path="file:///SDCard/BlackBerry/pictures/test.jpg"; приватный ButtonField btn;
ResizeImage()
{
btn=new ButtonField("Записать файл");
btn.setChangeListener(это); добавить (БТН); } public void fieldChanged (Field field, int context) {if (field == btn) {try {
InputStream inputStream = null; // Получить соединение с файлом FileConnection fileConnection = (FileConnection) Connector.open (path); if (fileConnection.exists ()) {inputStream = fileConnection.openInputStream (); // byte data [] = inputStream.toString (). getBytes ();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int j = 0;
while((j=inputStream.read()) != -1) {
baos.write(j);
}
byte data[] = baos.toByteArray();
inputStream.close();
fileConnection.close();
WriteFile("file:///SDCard/BlackBerry/pictures/org_Image.jpg",data);
EncodedImage eImage = EncodedImage.createEncodedImage(data,0,data.length);
int scaleFactorX = Fixed32.div(Fixed32.toFP(eImage.getWidth()), Fixed32.toFP(80));
int scaleFactorY = Fixed32.div(Fixed32.toFP(eImage.getHeight()), Fixed32.toFP(80));
eImage=eImage.scaleImage32(scaleFactorX, scaleFactorY);
WriteFile("file:///SDCard/BlackBerry/pictures/resize.jpg",eImage.getData());
BitmapField bit=new BitmapField(eImage.getBitmap());
add(bit);
}
}
catch(Exception e)
{
System.out.println("Exception is ==> "+e.getMessage());
}
}
}
void WriteFile(String fileName,byte[] data)
{
FileConnection fconn = null;
try
{
fconn = (FileConnection) Connector.open(fileName,Connector.READ_WRITE);
}
catch (IOException e)
{
System.out.print("Error opening file");
}
if (fconn.exists())
try
{
fconn.delete();
}
catch (IOException e)
{
System.out.print("Error deleting file");
}
try
{
fconn.create();
}
catch (IOException e)
{
System.out.print("Error creating file");
}
OutputStream out = null;
try
{
out = fconn.openOutputStream();
}
catch (IOException e) {
System.out.print("Error opening output stream");
}
try
{
out.write(data);
}
catch (IOException e) {
System.out.print("Error writing to output stream");
}
try
{
fconn.close();
}
catch (IOException e) {
System.out.print("Error closing file");
}
}
}
1 ответ
Проверьте getScaledHeight() и getScaledWidth() в EncodedImage.
Это грязный трюк с RIM.
Если вы очистите растровое изображение с помощью getBitmap(), у которого будут действительные getHeight() и getWidth().
Затем, если вы хотите сохранить это масштабированное изображение в формате JPEG, вам нужно перекодировать.
например
Bitmap scaledBMP = scaledEI.getBitmap();
JPEGEncodedImage finalJPEG = JPEGEncodedImage.encode(scaledBMP, 80); // int arg is quality
raw_media_bytes = finalJPEG.getData();
raw_length = finalJPEG.getLength();
raw_offset = finalJPEG.getOffset();
// don't forget to use the length and offset info, because getData() is
// not guaranteed to work by itself.
AFAIK, до версии 5.0, по крайней мере, нет встроенного масштабирования в формате jpeg без преобразования в растровое изображение.