Посоветуйте выбрать алгоритм
Я щас написал библиотеки для мп и програму для винды чтобы можно было создавать и потключать и отрисовывать любые шрифты с учетом ширины символов... есть перенос по словам печать в прямоугольную область.. разбивка на строки и все удобства... но я вот все таки не знаю какой для телефона сделать коректнее по производительности
а) создать масив картнок символов 32-255 (как это сделать чтоб прозрачность была в яве???ImageFromImage паскалевкий - не прозрачную выдает...) потом их выводить... Б) Делать так как я сейчас делаю, это немного не коректно, но работает быстренько довольно... гдето выдает 5 кадров обрисовывания екрана в секунду на 176/220 , принцип работы: M.G.setClip(x,y,iw,ih); M.G.drawImage(i, x-ix, y-iy,20); M.G.setClip(назад возвращаю...); помоему это очень долго.... и не коректно... Потому если кто знает помогите значит функцию сделать которая бы возвращала часть картинки... любым способом пусть даже и долгим... либу я скомпилю вы главное код напшите.... я немного смотерел яву но не вышло.. значит надо создать новый грффик имайж потом на него нарисовать картинку в определенном клипе и возвратить полученое изображение... |
Re: Посоветуйте выбрать алгоритм
как изменить этот код чтобы была прозрачность?? было бы неплохо чтоб еше и мидп 1.0 держал бы....
public static Image ii(Image image, int i, int j, int k, int l) { try { Image image1 = Image.createImage(k, l); image1.getGraphics().drawImage(image, -i, -j, 20); return image1; } catch(Exception exception) { return Image.createImage(1, 1); } } drawImage Draws the specified image by using the anchor point. The image can be drawn in different positions relative to the anchor point by passing the appropriate position constants. See anchor points. If the source image contains transparent pixels, the corresponding pixels in the destination image must be left untouched. If the source image contains partially transparent pixels, a compositing operation must be performed with the destination pixels, leaving all pixels of the destination image fully opaque. Рисует указанное изображение, используя донную точку. Изображение может рисоваться в различных положениях относительно донной точки, проходя подходящие константы положения. Посмотрите донные точки. Если начальное изображение содержит понятные пиксели, соответственные пиксели в изображении назначения должны быть оставлены нетронутыми. Если начальное изображение содержит частично понятные пиксели, действие compositing должно выполняться с пикселями назначения, оставляя все пиксели изображения назначения полностью темнота. что это означает? Пока использую Image image1 = Image.createImage(image,i,j,k,l,0); Но это уже мидп 2.0, а хочется создать универсальную вешь... |
Re: Посоветуйте выбрать алгоритм
А если шрифт рисовать с прозрачным фоном?
|
Re: Посоветуйте выбрать алгоритм
Цитата:
Можно рисовать с использованием сетклип, но это тоже медленовато и не коректно... |
Re: Посоветуйте выбрать алгоритм
M.G.setClip(назад возвращаю...); делай только в конце вывода всей строки.По производительности быстрее будет метод А, но по расходу памяти метод Б. Для копирования с сохранением прозрачности можно использовать разложение Image на rgb
|
Re: Посоветуйте выбрать алгоритм
M.G.setClip(x,y,iw,ih);
M.G.drawImage(i, x-ix, y-iy,20); в midp2 быстрее будет drawregion |
Re: Посоветуйте выбрать алгоритм
не факт. многие ява машины реализуют drawRegion именно через setClip, чтобы не думать.
|
Re: Посоветуйте выбрать алгоритм
Спасиб. тогда сдеаю через драв реджин
Просто с использованием сетклип может возникнуть с основным циклом работы рограммы, когда нужно вывести например какуето месагу и чтоб текст не выводился за краи...... только что попробовал драврежин не работает на большинстве телефонов, даже на моем к750 не работает... на эмуляторах мидпикс и сановском работает отлмчно... public static Image im(Image image, int i, int j, int k, int l) { try { Image image1 = Image.createImage(k, l);//(image,i,j,k,l,0); image1.getGraphics().drawRegion(image,i,j,k,l,0,0, 0,20); return image1; } catch(Exception exception) { return Image.createImage(1, 1); } } public static void drawregion (Image image, int i, int j, int k, int l,int x,int y){ M.G.drawRegion(image,i,j,k,l,0,x,y,0); } Кстати вторая процедура рисует не прозрачную картинку в эмуляторе. а первая функция отдает прозрачный рисунок... но жаль на телефонах не работает.. только на емуляторах... сделаю по другому методу, хотя он не очен коректени ресурсоемк |
Re: Посоветуйте выбрать алгоритм
сделал еше одну функцию... она тоже копирует без прозрачности :-(((
public static Image im2(Image image, int i, int j, int k, int l) { try { Image image1 = Image.createImage(k, l);//(image,i,j,k,l,0); image1.getGraphics().drawImage(image, -i , j, 20); return image1; } catch(Exception exception) { return Image.createImage(1, 1); } } Хотя если заменитьimage1.getGraphics().drawImage(image, -i , j, 20); на image1.getGraphics().drawRegion(image,i,j,k,l,0,0, 0,20); то прозрачность есть в процедре, только на телефонах не работает тока на эмуляторах.... |
Re: Посоветуйте выбрать алгоритм
Вложений: 2
я сделал так
public static void draw_region(Image src, int x_src, int y_src, int width, int height, int transform, int x_dest, int y_dest, int anchor) { M.G.drawRegion(src, x_src, y_src, width, height, transform, x_dest, y_dest, anchor); } переменной anchor надо присвоить 20 у меня прозрачность есть(и на эмуле и на е50) |
Re: Посоветуйте выбрать алгоритм
я точно так делал и 20 тоже... всеравно не работает на большинстве телефонов...
|
Re: Посоветуйте выбрать алгоритм
Kurdt, попробуй drawreq запустить, если пойдет значит у тебя ошибка где-то.
|
Re: Посоветуйте выбрать алгоритм
попробывал drawreq на сименсе сх70 - работает - 13 fps
на сонерике в700 - 59 fps |
Часовой пояс GMT +4, время: 06:24. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot