Как нарисовать текст на картинке?

load () не может найти объект из кеша или базы данных, генерируется исключение, и метод load () никогда не возвращает null.

Метод get () возвращает значение null, если объект не может быть найденным. Метод load () может возвращать прокси вместо реального постоянного экземпляра get () никогда не возвращает прокси.

23
задан RajaReddy PolamReddy 6 September 2011 в 13:41
поделиться

5 ответов

Обновлен метод SaveImage () для поддержки рисования текста.

void saveImage() {
    File myDir=new File("/sdcard/saved_images");
    myDir.mkdirs();
    Random generator = new Random();
    int n = 10000;
    n = generator.nextInt(n);
    String fname = "Image-"+ n +".jpg";
    File file = new File (myDir, fname);
    if (file.exists ()) file.delete (); 
    try {
        FileOutputStream out = new FileOutputStream(file);

        // NEWLY ADDED CODE STARTS HERE [
            Canvas canvas = new Canvas(originalBitmap);

            Paint paint = new Paint();
            paint.setColor(Color.WHITE); // Text Color
            paint.setTextSize(12); // Text Size
            paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); // Text Overlapping Pattern
            // some more settings...

            canvas.drawBitmap(originalBitmap, 0, 0, paint);
            canvas.drawText("Testing...", 10, 10, paint);
        // NEWLY ADDED CODE ENDS HERE ]

        originalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
        out.flush();
        out.close();
    } catch (Exception e) {
       e.printStackTrace();
    }
}

Дайте мне знать, если это работает для вас.

Шаш

25
ответ дан Dmide 6 September 2011 в 13:41
поделиться

Как предложено Владиславом Скумалом , попробуйте этот метод:

public Bitmap drawTextToBitmap(Context mContext,  int resourceId,  String mText) {
    try {
         Resources resources = mContext.getResources();
         float scale = resources.getDisplayMetrics().density;
         Bitmap bitmap = BitmapFactory.decodeResource(resources, resourceId);
         android.graphics.Bitmap.Config bitmapConfig =   bitmap.getConfig();
         // set default bitmap config if none
         if(bitmapConfig == null) {
           bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
         }
         // resource bitmaps are imutable,
         // so we need to convert it to mutable one
         bitmap = bitmap.copy(bitmapConfig, true);

         Canvas canvas = new Canvas(bitmap);
         // new antialised Paint
         Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
         // text color - #3D3D3D
         paint.setColor(Color.rgb(110,110, 110));
         // text size in pixels
         paint.setTextSize((int) (12 * scale));
         // text shadow
         paint.setShadowLayer(1f, 0f, 1f, Color.DKGRAY);

         // draw text to the Canvas center
         Rect bounds = new Rect();
         paint.getTextBounds(mText, 0, mText.length(), bounds);
         int x = (bitmap.getWidth() - bounds.width())/6;
         int y = (bitmap.getHeight() + bounds.height())/5;

         canvas.drawText(mText, x * scale, y * scale, paint);

         return bitmap;
    } catch (Exception e) {
        // TODO: handle exception

        return null;
    }

}

назовите этот метод

Bitmap bmp =drawTextToBitmap(this,R.drawable.aa,"Hello Android");
img.setImageBitmap(bmp);

на выходе

enter image description here

49
ответ дан Suragch 6 September 2011 в 13:41
поделиться

Вы можете расширить вид, чтобы создать собственный вид. Что-то вроде

public class PieView extends View { 
    public PieView(Context context) {
        super(context);
        overlayBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.piechart_shade, 
        null);
        overlayWidth  = overlayBitmap.getWidth();
        setLayoutParams(new LayoutParams(overlayWidth, overlayWidth));      
    }

    @Override     
    protected void onDraw(Canvas canvas) {      
        super.onDraw(canvas);
    }
}

В методе ondraw вы можете использовать canvas.drawBitmap и canvas.drawText для рисования растровых изображений и текста.

Таким образом, вы не требуете разметки кадра, поскольку все находится в одном пользовательском представлении.

Вы можете включить это в свой XML-файл как

<com.raj.PieView android:id="@+id/framelayout" android:layout_marginTop="30dip"      
    android:layout_height="fill_parent" android:layout_width="fill_parent"/>
.
1
ответ дан blessenm 6 September 2011 в 13:41
поделиться
  1. создать пустое растровое изображение
  2. создать новый объект Canvas и передать ему это растровое изображение
  3. вызвать view.draw (Canvas), передав ему объект холста, который вы только что создали. За подробностями обращайтесь к документации по методу.
  4. Используйте Bitmap.compress (), чтобы записать содержимое растрового изображения в файл OutputStream, возможно, в файл.

Псевдокод:

Bitmap  bitmap = Bitmap.createBitmap(200,200,Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawText();
//necessary arguments and draw whatever you want. thes all are drawn on the bitmap.finally save this bitmap
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
1
ответ дан Balaji.K 6 September 2011 в 13:41
поделиться

Раздуть текстовый вид поверх изображения. См. http://www.android10.org/index.php/forums/43-view-layout-a-resource/715-tutorial-android-xml-view-inflation для базового примера. Это должно быть самым простым способом.

LinearLayout lLayout;

lLayout = (LinearLayout)findViewById(R.id.layout1);

layout1 is the main layout.

final LayoutInflater  inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

TextView tv = (TextView)inflater.inflate(R.layout.text, null);

lLayout.addView(tv);
0
ответ дан Chirag 6 September 2011 в 13:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: