2013-02-28 1 views
1

У меня есть вопрос о водной отметке в коде android!Значок воды для воды

Дробящий код показал мое представление о WaterMark! Однако, он не работает нормально.

например. только конец изображения с .png можно поливать отметки

Есть ли схема о воде знака, (JPEG JPG WBMP BMP PNG или другие)

protected static Bitmap getDrmPicture(Context context,String path){ 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inPreferredConfig = Bitmap.Config.ARGB_8888; 

    Bitmap originMap = BitmapFactory.decodeFile (path,options); 
    Bitmap waterMark = BitmapFactory.decodeResource(context.getResources(), R.drawable.close); 

    InputStream input; 
    byte[] b; 
    Bitmap waterMark = null; 
    try { 
     input = context.getResources().openRawResource(R.drawable.lock); 
     b = new byte[input.available()]; 
     input.read(b); 
     waterMark = DecodeUtils.requestDecode(jc, b, null); 
    }catch(IOException e){ 
    } 

    int w = originMap.getWidth(); 
    int h = originMap.getHeight(); 

    int ww = waterMark.getWidth(); 
    int wh = waterMark.getHeight(); 

    Bitmap newb = Bitmap.createBitmap(w, h,Bitmap.Config.ARGB_8888;); 
    Canvas cv = new Canvas(newb); 
    cv.drawBitmap(originMap, 0, 0, null); 
    cv.drawBitmap(waterMark, w - ww, h - wh, null); 
    cv.save(Canvas.ALL_SAVE_FLAG); 
    cv.restore(); 

    return newb; 
} 

Спасибо!

+0

Вы пытались ['Bitmap.CompressFormat'] (http://developer.android.com/reference/android/graphics/Bitmap.CompressFormat.html)? –

+1

jpeg, jpg, wbmp, bmp форматы не поддерживают прозрачность. – madlymad

+0

@AlexBonel Я не понимаю, что вы имеете в виду – caopeng

ответ

4

Это код, я использую, чтобы применить водяной знак на JPEG, он должен работать для вас тоже,

public Bitmap applyWatermarkColorFilter(Drawable drawable) { 
    Bitmap image = ((BitmapDrawable)drawable).getBitmap(); 

    Bitmap result = Bitmap.createBitmap(image.getWidth(), image.getHeight(), Config.ARGB_8888); 
    Canvas canvas = new Canvas(result); 
    canvas.drawBitmap(image, 0, 0, null); 

    Bitmap watermark = BitmapFactory.decodeResource(getResources(), R.drawable.watermark); 

    canvas.drawBitmap(watermark, image.getWidth()/2 - watermark.getWidth()/2, 
      image.getHeight()/2 - watermark.getHeight()/2, 
      null); 

    return result; 
} 

В основном после того, как это и есть использовать Bitmap.compress(<arguments>), чтобы получить JPG из него.

Не пытайтесь использовать другие форматы. Возможно, это будет возможно, если вы сможете извлечь из них Bitmap, как это делается для jpg и png.

+0

Спасибо, ваш ответ Я не думаю, что ваш код и мой код разные! – caopeng

+0

Тогда странно, что вы не можете заставить его работать с jpg. –

+0

Мне очень жаль! На самом деле код может быть успешным! Причина водяной метки не может быть показана ' cv.drawBitmap (waterMark, w - ww, h - wh, null); ' Изменение на ' cv.drawBitmap (waterMark, w/2, h/2, null); ' Пометка воды может быть отмечена в центре изображения альбома! Однако, другой вопрос, подобный этому http://stackoverflow.com/questions/15135616/how-can-get-gallery2s-album-width-and-height – caopeng